mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model] IJPL-215652 fix finding all workspace-related code; test
GitOrigin-RevId: d605c020b173550aab5024683af81d264ebb6d11
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e24e46ce44
commit
8a9905544f
+2
-2
@@ -4,12 +4,12 @@ package com.intellij.devkit.workspaceModel.k1.metaModel
|
||||
import com.intellij.devkit.workspaceModel.metaModel.WorkspaceMetaModelProvider
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.workspaceModel.codegen.deft.meta.CompiledObjModule
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
internal class WorkspaceMetaModelProviderImpl : WorkspaceMetaModelProvider {
|
||||
|
||||
override fun loadObjModules(
|
||||
ktClasses: HashMap<String, KtClass>,
|
||||
ktClasses: HashMap<String, KtClassOrObject>,
|
||||
module: Module,
|
||||
processAbstractTypes: Boolean,
|
||||
isTestSourceFolder: Boolean,
|
||||
|
||||
+3
-3
@@ -10,13 +10,13 @@ import org.jetbrains.kotlin.analysis.api.permissions.allowAnalysisFromWriteActio
|
||||
import org.jetbrains.kotlin.analysis.api.permissions.allowAnalysisOnEdt
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.toKaSourceModuleForProduction
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.toKaSourceModuleForTest
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
internal class WorkspaceMetaModelProviderImpl : WorkspaceMetaModelProvider {
|
||||
|
||||
@OptIn(KaAllowAnalysisFromWriteAction::class, KaAllowAnalysisOnEdt::class)
|
||||
override fun loadObjModules(
|
||||
ktClasses: HashMap<String, KtClass>,
|
||||
ktClasses: HashMap<String, KtClassOrObject>,
|
||||
module: Module,
|
||||
processAbstractTypes: Boolean,
|
||||
isTestSourceFolder: Boolean,
|
||||
@@ -40,7 +40,7 @@ internal class WorkspaceMetaModelProviderImpl : WorkspaceMetaModelProvider {
|
||||
allowAnalysisFromWriteAction {
|
||||
packages
|
||||
.filter { it != "" }
|
||||
.mapNotNull { packageName ->
|
||||
.map { packageName ->
|
||||
metaModelProvider.getObjModule(packageName, kaModule)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,14 +58,14 @@ object CodeWriter {
|
||||
existingTargetFolder: () -> VirtualFile?,
|
||||
) {
|
||||
val sourceFilePerObjModule = HashMap<String, VirtualFile>()
|
||||
val ktClasses = HashMap<String, KtClass>()
|
||||
val ktClasses = HashMap<String, KtClassOrObject>()
|
||||
readAction {
|
||||
VfsUtilCore.processFilesRecursively(sourceFolder) {
|
||||
if (it.extension == "kt") {
|
||||
val ktFile = PsiManager.getInstance(project).findFile(it) as? KtFile?
|
||||
|
||||
ktFile?.declarations
|
||||
?.filterIsInstance<KtClass>()
|
||||
?.filterIsInstance<KtClassOrObject>()
|
||||
?.filter { it.name != null }
|
||||
?.forEach { ktClass ->
|
||||
val fqName = ktClass.fqName!!.asString()
|
||||
@@ -126,13 +126,13 @@ object CodeWriter {
|
||||
}
|
||||
|
||||
// compatibility invoke in FacetEntity and KotlinSettingsEntity
|
||||
val savedCompatibilityInvokeCode = mutableMapOf<KtClass, PsiElement>()
|
||||
val savedCompatibilityInvokeCode = mutableMapOf<KtClassOrObject, PsiElement>()
|
||||
saveCompatibilityCode(ktClasses, savedCompatibilityInvokeCode)
|
||||
|
||||
indicator.text = DevKitWorkspaceModelBundle.message("progress.text.removing.old.code")
|
||||
removeGeneratedCode(ktClasses, genFolder)
|
||||
|
||||
val topLevelDeclarations = MultiMap.create<KtFile, Pair<KtClass, List<KtDeclaration>>>()
|
||||
val topLevelDeclarations = MultiMap.create<KtFile, Pair<KtClassOrObject, List<KtDeclaration>>>()
|
||||
val importsByFile = FactoryMap.create<KtFile, Imports> { Imports(it.packageFqName.asString()) }
|
||||
val generatedFiles = ArrayList<KtFile>()
|
||||
|
||||
@@ -291,7 +291,7 @@ object CodeWriter {
|
||||
return entitiesImplementations + metadataStorageImplementation
|
||||
}
|
||||
|
||||
private fun saveCompatibilityCode(ktClasses: Map<String, KtClass>, savedCompatibilityInvokeCode: MutableMap<KtClass, PsiElement>) {
|
||||
private fun saveCompatibilityCode(ktClasses: Map<String, KtClassOrObject>, savedCompatibilityInvokeCode: MutableMap<KtClassOrObject, PsiElement>) {
|
||||
for (ktClass in ktClasses.values) {
|
||||
val companionDeclaration = ktClass.body?.declarations?.find { it is KtObjectDeclaration && it.isCompanion() } as? KtObjectDeclaration
|
||||
?: continue
|
||||
@@ -301,7 +301,7 @@ object CodeWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeGeneratedCode(ktClasses: Map<String, KtClass>, genFolder: VirtualFile) {
|
||||
private fun removeGeneratedCode(ktClasses: Map<String, KtClassOrObject>, genFolder: VirtualFile) {
|
||||
ktClasses.values.flatMapTo(HashSet()) { listOfNotNull(it.containingFile.node, it.body?.node) }.forEach {
|
||||
removeChildrenInGeneratedRegions(it)
|
||||
}
|
||||
@@ -355,9 +355,9 @@ object CodeWriter {
|
||||
private fun addGeneratedObjClassFile(
|
||||
code: ObjClassGeneratedCode, generatedFiles: MutableList<KtFile>,
|
||||
project: Project, sourceFolder: VirtualFile, genFolder: VirtualFile,
|
||||
ktClasses: Map<String, KtClass>, importsByFile: MutableMap<KtFile, Imports>,
|
||||
topLevelDeclarations: MultiMap<KtFile, Pair<KtClass, List<KtDeclaration>>>, psiFactory: KtPsiFactory,
|
||||
savedCompatibilityInvokeCode: MutableMap<KtClass, PsiElement>,
|
||||
ktClasses: Map<String, KtClassOrObject>, importsByFile: MutableMap<KtFile, Imports>,
|
||||
topLevelDeclarations: MultiMap<KtFile, Pair<KtClassOrObject, List<KtDeclaration>>>, psiFactory: KtPsiFactory,
|
||||
savedCompatibilityInvokeCode: MutableMap<KtClassOrObject, PsiElement>,
|
||||
) {
|
||||
|
||||
if (code.target.name in SKIPPED_TYPES) return
|
||||
@@ -469,7 +469,7 @@ object CodeWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private fun addInnerDeclarations(ktClass: KtClass, code: ObjClassGeneratedCode, imports: Imports, savedCompatibilityInvokeCode: MutableMap<KtClass, PsiElement>) {
|
||||
private fun addInnerDeclarations(ktClass: KtClassOrObject, code: ObjClassGeneratedCode, imports: Imports, savedCompatibilityInvokeCode: MutableMap<KtClassOrObject, PsiElement>) {
|
||||
if (code.builderInterface.isEmpty()) return
|
||||
val psiFactory = KtPsiFactory(ktClass.project)
|
||||
val builderInterface = ktClass.addDeclaration(psiFactory.createClass(imports.findAndRemoveFqns(code.builderInterface)))
|
||||
|
||||
+2
-2
@@ -3,11 +3,11 @@ package com.intellij.devkit.workspaceModel.metaModel
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.workspaceModel.codegen.deft.meta.CompiledObjModule
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
interface WorkspaceMetaModelProvider {
|
||||
fun loadObjModules(
|
||||
ktClasses: HashMap<String, KtClass>,
|
||||
ktClasses: HashMap<String, KtClassOrObject>,
|
||||
module: Module,
|
||||
processAbstractTypes: Boolean,
|
||||
isTestSourceFolder: Boolean,
|
||||
|
||||
+28
@@ -17,6 +17,31 @@ internal object MetadataStorageImpl : MetadataStorageBase() {
|
||||
|
||||
var typeMetadata: StorageTypeMetadata
|
||||
|
||||
typeMetadata = FinalClassMetadata.ObjectMetadata(fqName = "com.intellij.workspaceModel.test.api.subpackage2.SimpleEntitySourceObject",
|
||||
properties = listOf(
|
||||
OwnPropertyMetadata(isComputable = false, isKey = false, isOpen = false,
|
||||
name = "virtualFileUrl",
|
||||
valueType = ValueTypeMetadata.SimpleType.CustomType(
|
||||
isNullable = true,
|
||||
typeMetadata = FinalClassMetadata.KnownClass(
|
||||
fqName = "com.intellij.platform.workspace.storage.url.VirtualFileUrl")),
|
||||
withDefault = false)),
|
||||
supertypes = listOf("com.intellij.platform.workspace.storage.EntitySource"))
|
||||
|
||||
addMetadata(typeMetadata)
|
||||
|
||||
typeMetadata = FinalClassMetadata.ClassMetadata(fqName = "com.intellij.workspaceModel.test.api.subpackage3.SimpleEntitySourceClass",
|
||||
properties = listOf(
|
||||
OwnPropertyMetadata(isComputable = false, isKey = false, isOpen = false,
|
||||
name = "virtualFileUrl",
|
||||
valueType = ValueTypeMetadata.SimpleType.CustomType(
|
||||
isNullable = true, typeMetadata = FinalClassMetadata.KnownClass(
|
||||
fqName = "com.intellij.platform.workspace.storage.url.VirtualFileUrl")),
|
||||
withDefault = false)),
|
||||
supertypes = listOf("com.intellij.platform.workspace.storage.EntitySource"))
|
||||
|
||||
addMetadata(typeMetadata)
|
||||
|
||||
typeMetadata = EntityMetadata(fqName = "com.intellij.workspaceModel.test.api.SimpleEntity",
|
||||
entityDataFqName = "com.intellij.workspaceModel.test.api.impl.SimpleEntityData",
|
||||
supertypes = listOf("com.intellij.platform.workspace.storage.WorkspaceEntity"), properties = listOf(
|
||||
@@ -57,6 +82,9 @@ internal object MetadataStorageImpl : MetadataStorageBase() {
|
||||
override fun initializeMetadataHash() {
|
||||
addMetadataHash(typeFqn = "com.intellij.workspaceModel.test.api.SimpleEntity", metadataHash = 513917454)
|
||||
addMetadataHash(typeFqn = "com.intellij.workspaceModel.test.api.subpackage.SubSimpleEntity", metadataHash = 1398130266)
|
||||
addMetadataHash(typeFqn = "com.intellij.platform.workspace.storage.EntitySource", metadataHash = 1297322940)
|
||||
addMetadataHash(typeFqn = "com.intellij.workspaceModel.test.api.subpackage2.SimpleEntitySourceObject", metadataHash = -1265359381)
|
||||
addMetadataHash(typeFqn = "com.intellij.workspaceModel.test.api.subpackage3.SimpleEntitySourceClass", metadataHash = 940328784)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage2.impl
|
||||
|
||||
import com.intellij.platform.workspace.storage.WorkspaceEntityInternalApi
|
||||
import com.intellij.platform.workspace.storage.metadata.MetadataStorageBridge
|
||||
import com.intellij.workspaceModel.test.api.impl.MetadataStorageImpl
|
||||
|
||||
@OptIn(WorkspaceEntityInternalApi::class)
|
||||
internal object MetadataStorageImpl : MetadataStorageBridge(MetadataStorageImpl)
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage3.impl
|
||||
|
||||
import com.intellij.platform.workspace.storage.WorkspaceEntityInternalApi
|
||||
import com.intellij.platform.workspace.storage.metadata.MetadataStorageBridge
|
||||
import com.intellij.workspaceModel.test.api.impl.MetadataStorageImpl
|
||||
|
||||
@OptIn(WorkspaceEntityInternalApi::class)
|
||||
internal object MetadataStorageImpl : MetadataStorageBridge(MetadataStorageImpl)
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage2
|
||||
|
||||
import com.intellij.platform.workspace.storage.EntitySource
|
||||
|
||||
object SimpleEntitySourceObject : EntitySource
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage3
|
||||
|
||||
import com.intellij.platform.workspace.storage.EntitySource
|
||||
|
||||
class SimpleEntitySourceClass : EntitySource
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage2
|
||||
|
||||
import com.intellij.platform.workspace.storage.EntitySource
|
||||
|
||||
object SimpleEntitySourceObject : EntitySource
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.intellij.workspaceModel.test.api.subpackage3
|
||||
|
||||
import com.intellij.platform.workspace.storage.EntitySource
|
||||
|
||||
class SimpleEntitySourceClass : EntitySource
|
||||
Reference in New Issue
Block a user