From c6756762e5792b66bd7bae22955ae5f7382ee02a Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 5 Feb 2021 23:05:05 +0300 Subject: [PATCH] [Commonizer] Refactoring: Clean-up in CirTreeMerger --- .../commonizer/mergedtree/CirClassNode.kt | 8 +- .../commonizer/mergedtree/CirNode.kt | 24 +++++ .../mergedtree/CirNodeWithClassId.kt | 13 --- .../mergedtree/CirNodeWithFqName.kt | 13 --- .../mergedtree/CirNodeWithLiftingUp.kt | 14 --- .../commonizer/mergedtree/CirPackageNode.kt | 8 +- .../commonizer/mergedtree/CirTreeMerger.kt | 88 +++++++------------ 7 files changed, 65 insertions(+), 103 deletions(-) delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithClassId.kt delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithFqName.kt delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithLiftingUp.kt diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirClassNode.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirClassNode.kt index 5dcb5a586d9..8351d8349a7 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirClassNode.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirClassNode.kt @@ -16,12 +16,12 @@ class CirClassNode( override val targetDeclarations: CommonizedGroup, override val commonDeclaration: NullableLazyValue, override val classId: ClassId -) : CirNodeWithClassId { +) : CirNodeWithClassId, CirNodeWithMembers { val constructors: MutableMap = THashMap() - val properties: MutableMap = THashMap() - val functions: MutableMap = THashMap() - val classes: MutableMap = THashMap() + override val properties: MutableMap = THashMap() + override val functions: MutableMap = THashMap() + override val classes: MutableMap = THashMap() override fun accept(visitor: CirNodeVisitor, data: T): R = visitor.visitClassNode(this, data) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNode.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNode.kt index f9074553a01..da6e5f63e72 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNode.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNode.kt @@ -5,8 +5,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree +import gnu.trove.THashMap +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClassifier import org.jetbrains.kotlin.descriptors.commonizer.cir.CirDeclaration +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirLiftedUpDeclaration import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.storage.NullableLazyValue interface CirNode { @@ -37,3 +43,21 @@ interface CirNode { } } +interface CirNodeWithClassId : CirNode { + val classId: ClassId +} + +interface CirNodeWithFqName : CirNode { + val fqName: FqName +} + +interface CirNodeWithLiftingUp : CirNode { + val isLiftedUp: Boolean + get() = (commonDeclaration() as? CirLiftedUpDeclaration)?.isLiftedUp == true +} + +interface CirNodeWithMembers : CirNode { + val properties: MutableMap + val functions: MutableMap + val classes: MutableMap +} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithClassId.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithClassId.kt deleted file mode 100644 index 997d0cbe48c..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithClassId.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.descriptors.commonizer.mergedtree - -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClassifier -import org.jetbrains.kotlin.name.ClassId - -interface CirNodeWithClassId : CirNode { - val classId: ClassId -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithFqName.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithFqName.kt deleted file mode 100644 index 2f4757cfba8..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithFqName.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.descriptors.commonizer.mergedtree - -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirDeclaration -import org.jetbrains.kotlin.name.FqName - -interface CirNodeWithFqName : CirNode { - val fqName: FqName -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithLiftingUp.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithLiftingUp.kt deleted file mode 100644 index 864728f4497..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirNodeWithLiftingUp.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.descriptors.commonizer.mergedtree - -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirDeclaration -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirLiftedUpDeclaration - -interface CirNodeWithLiftingUp : CirNode { - val isLiftedUp: Boolean - get() = (commonDeclaration() as? CirLiftedUpDeclaration)?.isLiftedUp == true -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirPackageNode.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirPackageNode.kt index f30272ff899..c52eb4e5849 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirPackageNode.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirPackageNode.kt @@ -17,11 +17,11 @@ class CirPackageNode( override val commonDeclaration: NullableLazyValue, override val fqName: FqName, val moduleName: Name -) : CirNodeWithFqName { +) : CirNodeWithFqName, CirNodeWithMembers { - val properties: MutableMap = THashMap() - val functions: MutableMap = THashMap() - val classes: MutableMap = THashMap() + override val properties: MutableMap = THashMap() + override val functions: MutableMap = THashMap() + override val classes: MutableMap = THashMap() val typeAliases: MutableMap = THashMap() override fun accept(visitor: CirNodeVisitor, data: T) = diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirTreeMerger.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirTreeMerger.kt index b26574d092f..6b3a2c75ded 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirTreeMerger.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirTreeMerger.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo import org.jetbrains.kotlin.descriptors.commonizer.CommonizerParameters import org.jetbrains.kotlin.descriptors.commonizer.TargetProvider -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClass import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.* import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.descriptors.commonizer.utils.internedClassId @@ -18,7 +17,6 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.storage.NullableLazyValue import org.jetbrains.kotlin.storage.StorageManager /** @@ -110,16 +108,15 @@ class CirTreeMerger( val allDependeeModules = targetDependeeModules + dependeeModules val moduleDescriptors: Map = targetProvider.modulesProvider.loadModules(allDependeeModules) - val modules: MutableMap = rootNode.modules moduleDescriptors.forEach { (name, moduleDescriptor) -> val moduleInfo = commonModuleInfos[name] ?: return@forEach - processModule(modules, targetIndex, moduleInfo, moduleDescriptor) + processModule(rootNode, targetIndex, moduleInfo, moduleDescriptor) } } private fun processModule( - modules: MutableMap, + rootNode: CirRootNode, targetIndex: Int, moduleInfo: ModuleInfo, moduleDescriptor: ModuleDescriptor @@ -127,114 +124,97 @@ class CirTreeMerger( processCInteropModuleAttributes(moduleInfo) val moduleName: Name = moduleDescriptor.name.intern() - val moduleNode: CirModuleNode = modules.getOrPut(moduleName) { + val moduleNode: CirModuleNode = rootNode.modules.getOrPut(moduleName) { buildModuleNode(storageManager, size) } moduleNode.targetDeclarations[targetIndex] = CirModuleFactory.create(moduleDescriptor) - val packages: MutableMap = moduleNode.packages - moduleDescriptor.collectNonEmptyPackageMemberScopes { packageFqName, packageMemberScope -> - processPackage(packages, targetIndex, packageFqName.intern(), packageMemberScope, moduleName) + processPackage(moduleNode, targetIndex, packageFqName.intern(), packageMemberScope, moduleName) } } private fun processPackage( - packages: MutableMap, + moduleNode: CirModuleNode, targetIndex: Int, packageFqName: FqName, packageMemberScope: MemberScope, moduleName: Name ) { - val packageNode: CirPackageNode = packages.getOrPut(packageFqName) { + val packageNode: CirPackageNode = moduleNode.packages.getOrPut(packageFqName) { buildPackageNode(storageManager, size, packageFqName, moduleName) } packageNode.targetDeclarations[targetIndex] = CirPackageFactory.create(packageFqName) - val properties: MutableMap = packageNode.properties - val functions: MutableMap = packageNode.functions - val classes: MutableMap = packageNode.classes - val typeAliases: MutableMap = packageNode.typeAliases - packageMemberScope.collectMembers( PropertyCollector { propertyDescriptor -> - processProperty(properties, targetIndex, propertyDescriptor, null) + processProperty(packageNode, targetIndex, propertyDescriptor) }, FunctionCollector { functionDescriptor -> - processFunction(functions, targetIndex, functionDescriptor, null) + processFunction(packageNode, targetIndex, functionDescriptor) }, ClassCollector { classDescriptor -> - processClass(classes, targetIndex, classDescriptor, null) { className -> + processClass(packageNode, targetIndex, classDescriptor) { className -> internedClassId(packageFqName, className) } }, TypeAliasCollector { typeAliasDescriptor -> - processTypeAlias(typeAliases, targetIndex, typeAliasDescriptor, packageFqName) + processTypeAlias(packageNode, targetIndex, typeAliasDescriptor) } ) } private fun processProperty( - properties: MutableMap, + ownerNode: CirNodeWithMembers<*, *>, targetIndex: Int, - propertyDescriptor: PropertyDescriptor, - parentCommonDeclaration: NullableLazyValue<*>? + propertyDescriptor: PropertyDescriptor ) { - val propertyNode: CirPropertyNode = properties.getOrPut(PropertyApproximationKey(propertyDescriptor)) { - buildPropertyNode(storageManager, size, classifiers, parentCommonDeclaration) + val propertyNode: CirPropertyNode = ownerNode.properties.getOrPut(PropertyApproximationKey(propertyDescriptor)) { + buildPropertyNode(storageManager, size, classifiers, (ownerNode as? CirClassNode)?.commonDeclaration) } propertyNode.targetDeclarations[targetIndex] = CirPropertyFactory.create(propertyDescriptor) } private fun processFunction( - functions: MutableMap, + ownerNode: CirNodeWithMembers<*, *>, targetIndex: Int, - functionDescriptor: SimpleFunctionDescriptor, - parentCommonDeclaration: NullableLazyValue<*>? + functionDescriptor: SimpleFunctionDescriptor ) { - val functionNode: CirFunctionNode = functions.getOrPut(FunctionApproximationKey(functionDescriptor)) { - buildFunctionNode(storageManager, size, classifiers, parentCommonDeclaration) + val functionNode: CirFunctionNode = ownerNode.functions.getOrPut(FunctionApproximationKey(functionDescriptor)) { + buildFunctionNode(storageManager, size, classifiers, (ownerNode as? CirClassNode)?.commonDeclaration) } functionNode.targetDeclarations[targetIndex] = CirFunctionFactory.create(functionDescriptor) } private fun processClass( - classes: MutableMap, + ownerNode: CirNodeWithMembers<*, *>, targetIndex: Int, classDescriptor: ClassDescriptor, - parentCommonDeclaration: NullableLazyValue<*>?, classIdFunction: (Name) -> ClassId ) { val className = classDescriptor.name.intern() val classId = classIdFunction(className) - val classNode: CirClassNode = classes.getOrPut(className) { - buildClassNode(storageManager, size, classifiers, parentCommonDeclaration, classId) + val classNode: CirClassNode = ownerNode.classes.getOrPut(className) { + buildClassNode(storageManager, size, classifiers, (ownerNode as? CirClassNode)?.commonDeclaration, classId) } classNode.targetDeclarations[targetIndex] = CirClassFactory.create(classDescriptor) - val parentCommonDeclarationForMembers: NullableLazyValue = classNode.commonDeclaration - - val constructors: MutableMap = classNode.constructors - val properties: MutableMap = classNode.properties - val functions: MutableMap = classNode.functions - val nestedClasses: MutableMap = classNode.classes - if (classDescriptor.kind != ClassKind.ENUM_ENTRY) { classDescriptor.constructors.forEach { constructorDescriptor -> - processClassConstructor(constructors, targetIndex, constructorDescriptor, parentCommonDeclarationForMembers) + processClassConstructor(classNode, targetIndex, constructorDescriptor) } } classDescriptor.unsubstitutedMemberScope.collectMembers( PropertyCollector { propertyDescriptor -> - processProperty(properties, targetIndex, propertyDescriptor, parentCommonDeclarationForMembers) + processProperty(classNode, targetIndex, propertyDescriptor) }, FunctionCollector { functionDescriptor -> - processFunction(functions, targetIndex, functionDescriptor, parentCommonDeclarationForMembers) + processFunction(classNode, targetIndex, functionDescriptor) }, ClassCollector { nestedClassDescriptor -> - processClass(nestedClasses, targetIndex, nestedClassDescriptor, parentCommonDeclarationForMembers) { nestedClassName -> + processClass(classNode, targetIndex, nestedClassDescriptor) { nestedClassName -> internedClassId(classId, nestedClassName) } } @@ -242,27 +222,25 @@ class CirTreeMerger( } private fun processClassConstructor( - constructors: MutableMap, + classNode: CirClassNode, targetIndex: Int, - constructorDescriptor: ClassConstructorDescriptor, - parentCommonDeclaration: NullableLazyValue<*>? + constructorDescriptor: ClassConstructorDescriptor ) { - val constructorNode: CirClassConstructorNode = constructors.getOrPut(ConstructorApproximationKey(constructorDescriptor)) { - buildClassConstructorNode(storageManager, size, classifiers, parentCommonDeclaration) + val constructorNode: CirClassConstructorNode = classNode.constructors.getOrPut(ConstructorApproximationKey(constructorDescriptor)) { + buildClassConstructorNode(storageManager, size, classifiers, classNode.commonDeclaration) } constructorNode.targetDeclarations[targetIndex] = CirClassConstructorFactory.create(constructorDescriptor) } private fun processTypeAlias( - typeAliases: MutableMap, + packageNode: CirPackageNode, targetIndex: Int, - typeAliasDescriptor: TypeAliasDescriptor, - packageFqName: FqName + typeAliasDescriptor: TypeAliasDescriptor ) { val typeAliasName = typeAliasDescriptor.name.intern() - val typeAliasClassId = internedClassId(packageFqName, typeAliasName) + val typeAliasClassId = internedClassId(packageNode.fqName, typeAliasName) - val typeAliasNode: CirTypeAliasNode = typeAliases.getOrPut(typeAliasName) { + val typeAliasNode: CirTypeAliasNode = packageNode.typeAliases.getOrPut(typeAliasName) { buildTypeAliasNode(storageManager, size, classifiers, typeAliasClassId) } typeAliasNode.targetDeclarations[targetIndex] = CirTypeAliasFactory.create(typeAliasDescriptor)