[Commonizer] Re-organize utilities
This commit is contained in:
+17
-8
@@ -5,14 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedPackageFragmentProvider.Companion.plusAssign
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedPackageFragmentProvider.Companion.plusAssign
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.dimension
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
|
||||||
@@ -51,7 +52,8 @@ internal class DeclarationsBuilderVisitor1(
|
|||||||
|
|
||||||
override fun visitModuleNode(node: CirModuleNode, data: List<DeclarationDescriptor?>): List<ModuleDescriptorImpl?> {
|
override fun visitModuleNode(node: CirModuleNode, data: List<DeclarationDescriptor?>): List<ModuleDescriptorImpl?> {
|
||||||
// build module descriptors:
|
// build module descriptors:
|
||||||
val moduleDescriptorsGroup = CommonizedGroup<ModuleDescriptorImpl>(node.dimension)
|
val moduleDescriptorsGroup =
|
||||||
|
CommonizedGroup<ModuleDescriptorImpl>(node.dimension)
|
||||||
node.buildDescriptors(components, moduleDescriptorsGroup)
|
node.buildDescriptors(components, moduleDescriptorsGroup)
|
||||||
val moduleDescriptors = moduleDescriptorsGroup.toList()
|
val moduleDescriptors = moduleDescriptorsGroup.toList()
|
||||||
|
|
||||||
@@ -74,7 +76,8 @@ internal class DeclarationsBuilderVisitor1(
|
|||||||
val containingDeclarations = data.asListContaining<ModuleDescriptorImpl>()
|
val containingDeclarations = data.asListContaining<ModuleDescriptorImpl>()
|
||||||
|
|
||||||
// build package fragments:
|
// build package fragments:
|
||||||
val packageFragmentsGroup = CommonizedGroup<CommonizedPackageFragmentDescriptor>(node.dimension)
|
val packageFragmentsGroup =
|
||||||
|
CommonizedGroup<CommonizedPackageFragmentDescriptor>(node.dimension)
|
||||||
node.buildDescriptors(components, packageFragmentsGroup, containingDeclarations)
|
node.buildDescriptors(components, packageFragmentsGroup, containingDeclarations)
|
||||||
val packageFragments = packageFragmentsGroup.toList()
|
val packageFragments = packageFragmentsGroup.toList()
|
||||||
|
|
||||||
@@ -102,7 +105,10 @@ internal class DeclarationsBuilderVisitor1(
|
|||||||
error("This method should not be called in ${this::class.java}")
|
error("This method should not be called in ${this::class.java}")
|
||||||
|
|
||||||
override fun visitClassNode(node: CirClassNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
override fun visitClassNode(node: CirClassNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
||||||
val classesGroup = CommonizedGroup<ClassifierDescriptorWithTypeParameters>(node.dimension)
|
val classesGroup =
|
||||||
|
CommonizedGroup<ClassifierDescriptorWithTypeParameters>(
|
||||||
|
node.dimension
|
||||||
|
)
|
||||||
node.buildDescriptors(components, classesGroup, data)
|
node.buildDescriptors(components, classesGroup, data)
|
||||||
val classes = classesGroup.toList().asListContaining<CommonizedClassDescriptor>()
|
val classes = classesGroup.toList().asListContaining<CommonizedClassDescriptor>()
|
||||||
|
|
||||||
@@ -124,7 +130,10 @@ internal class DeclarationsBuilderVisitor1(
|
|||||||
error("This method should not be called in ${this::class.java}")
|
error("This method should not be called in ${this::class.java}")
|
||||||
|
|
||||||
override fun visitTypeAliasNode(node: CirTypeAliasNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
override fun visitTypeAliasNode(node: CirTypeAliasNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
||||||
val typeAliasesGroup = CommonizedGroup<ClassifierDescriptorWithTypeParameters>(node.dimension)
|
val typeAliasesGroup =
|
||||||
|
CommonizedGroup<ClassifierDescriptorWithTypeParameters>(
|
||||||
|
node.dimension
|
||||||
|
)
|
||||||
node.buildDescriptors(components, typeAliasesGroup, data)
|
node.buildDescriptors(components, typeAliasesGroup, data)
|
||||||
val typeAliases = typeAliasesGroup.toList()
|
val typeAliases = typeAliasesGroup.toList()
|
||||||
|
|
||||||
|
|||||||
+8
-5
@@ -6,12 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.asListContaining
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.noContainingDeclarations
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.noContainingDeclarations
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.noReturningDeclarations
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.noReturningDeclarations
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.DeclarationsBuilderVisitor1.Companion.asListContaining
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
|
|
||||||
/** Builds and initializes the new tree of common descriptors */
|
/** Builds and initializes the new tree of common descriptors */
|
||||||
@@ -65,14 +65,16 @@ internal class DeclarationsBuilderVisitor2(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPropertyNode(node: CirPropertyNode, data: List<DeclarationDescriptor?>): List<PropertyDescriptor?> {
|
override fun visitPropertyNode(node: CirPropertyNode, data: List<DeclarationDescriptor?>): List<PropertyDescriptor?> {
|
||||||
val propertyDescriptorsGroup = CommonizedGroup<PropertyDescriptor>(node.dimension)
|
val propertyDescriptorsGroup =
|
||||||
|
CommonizedGroup<PropertyDescriptor>(node.dimension)
|
||||||
node.buildDescriptors(components, propertyDescriptorsGroup, data)
|
node.buildDescriptors(components, propertyDescriptorsGroup, data)
|
||||||
|
|
||||||
return propertyDescriptorsGroup.toList()
|
return propertyDescriptorsGroup.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFunctionNode(node: CirFunctionNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
override fun visitFunctionNode(node: CirFunctionNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
||||||
val functionDescriptorsGroup = CommonizedGroup<SimpleFunctionDescriptor>(node.dimension)
|
val functionDescriptorsGroup =
|
||||||
|
CommonizedGroup<SimpleFunctionDescriptor>(node.dimension)
|
||||||
node.buildDescriptors(components, functionDescriptorsGroup, data)
|
node.buildDescriptors(components, functionDescriptorsGroup, data)
|
||||||
|
|
||||||
return functionDescriptorsGroup.toList()
|
return functionDescriptorsGroup.toList()
|
||||||
@@ -114,7 +116,8 @@ internal class DeclarationsBuilderVisitor2(
|
|||||||
override fun visitClassConstructorNode(node: CirClassConstructorNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
override fun visitClassConstructorNode(node: CirClassConstructorNode, data: List<DeclarationDescriptor?>): List<DeclarationDescriptor?> {
|
||||||
val containingDeclarations = data.asListContaining<CommonizedClassDescriptor>()
|
val containingDeclarations = data.asListContaining<CommonizedClassDescriptor>()
|
||||||
|
|
||||||
val constructorsGroup = CommonizedGroup<ClassConstructorDescriptor>(node.dimension)
|
val constructorsGroup =
|
||||||
|
CommonizedGroup<ClassConstructorDescriptor>(node.dimension)
|
||||||
node.buildDescriptors(components, constructorsGroup, containingDeclarations)
|
node.buildDescriptors(components, constructorsGroup, containingDeclarations)
|
||||||
|
|
||||||
return constructorsGroup.toList()
|
return constructorsGroup.toList()
|
||||||
|
|||||||
+2
-2
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.builder
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isUnderStandardKotlinPackages
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.Companion.areCompatible
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.Companion.areCompatible
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.resolveClassOrTypeAliasByFqName
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderStandardKotlinPackages
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.resolveClassOrTypeAliasByFqName
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
+5
-3
@@ -5,10 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
||||||
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
internal fun CirClassNode.buildDescriptors(
|
internal fun CirClassNode.buildDescriptors(
|
||||||
|
|||||||
+20
-10
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.builder
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.createKotlinNativeForwardDeclarationsModule
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isUnderKotlinNativeSyntheticPackages
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.dimension
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.dimension
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.createKotlinNativeForwardDeclarationsModule
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderKotlinNativeSyntheticPackages
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -29,13 +29,23 @@ class DeclarationsBuilderCache(dimension: Int) {
|
|||||||
check(dimension > 0)
|
check(dimension > 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val modules = CommonizedGroup<List<ModuleDescriptorImpl>>(dimension)
|
private val modules =
|
||||||
private val packageFragments = CommonizedGroupMap<Pair<Name, FqName>, CommonizedPackageFragmentDescriptor>(dimension)
|
CommonizedGroup<List<ModuleDescriptorImpl>>(dimension)
|
||||||
private val classes = CommonizedGroupMap<FqName, CommonizedClassDescriptor>(dimension)
|
private val packageFragments =
|
||||||
private val typeAliases = CommonizedGroupMap<FqName, CommonizedTypeAliasDescriptor>(dimension)
|
CommonizedGroupMap<Pair<Name, FqName>, CommonizedPackageFragmentDescriptor>(
|
||||||
|
dimension
|
||||||
|
)
|
||||||
|
private val classes =
|
||||||
|
CommonizedGroupMap<FqName, CommonizedClassDescriptor>(dimension)
|
||||||
|
private val typeAliases =
|
||||||
|
CommonizedGroupMap<FqName, CommonizedTypeAliasDescriptor>(
|
||||||
|
dimension
|
||||||
|
)
|
||||||
|
|
||||||
private val forwardDeclarationsModules = CommonizedGroup<ModuleDescriptorImpl>(dimension)
|
private val forwardDeclarationsModules =
|
||||||
private val allModulesWithDependencies = CommonizedGroup<List<ModuleDescriptor>>(dimension)
|
CommonizedGroup<ModuleDescriptorImpl>(dimension)
|
||||||
|
private val allModulesWithDependencies =
|
||||||
|
CommonizedGroup<List<ModuleDescriptor>>(dimension)
|
||||||
|
|
||||||
fun getCachedPackageFragments(moduleName: Name, packageFqName: FqName): List<CommonizedPackageFragmentDescriptor?> =
|
fun getCachedPackageFragments(moduleName: Name, packageFqName: FqName): List<CommonizedPackageFragmentDescriptor?> =
|
||||||
packageFragments.getOrFail(moduleName to packageFqName)
|
packageFragments.getOrFail(moduleName to packageFqName)
|
||||||
|
|||||||
+1
-1
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirFunction
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirFunction
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirFunctionNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirFunctionNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
||||||
|
|
||||||
internal fun CirFunctionNode.buildDescriptors(
|
internal fun CirFunctionNode.buildDescriptors(
|
||||||
|
|||||||
+1
-1
@@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModule
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModule
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModuleNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModuleNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
|
|
||||||
internal fun CirModuleNode.buildDescriptors(
|
internal fun CirModuleNode.buildDescriptors(
|
||||||
|
|||||||
+1
-1
@@ -6,10 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackage
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackage
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackageNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackageNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|||||||
+1
-1
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirProperty
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirProperty
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPropertyNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPropertyNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.descriptors.impl.FieldDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.FieldDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
||||||
|
|||||||
+1
-1
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.descriptors.commonizer.builder
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirClass
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirClass
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirTypeAlias
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirTypeAlias
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirTypeAliasNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirTypeAliasNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.indexOfCommon
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
internal fun CirTypeAliasNode.buildDescriptors(
|
internal fun CirTypeAliasNode.buildDescriptors(
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModuleForCommonization.DeserializedModule
|
import org.jetbrains.kotlin.descriptors.commonizer.ModuleForCommonization.DeserializedModule
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModuleForCommonization.SyntheticModule
|
import org.jetbrains.kotlin.descriptors.commonizer.ModuleForCommonization.SyntheticModule
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.createKotlinNativeForwardDeclarationsModule
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.ir.util.UniqId
|
import org.jetbrains.kotlin.ir.util.UniqId
|
||||||
import org.jetbrains.kotlin.konan.library.*
|
import org.jetbrains.kotlin.konan.library.*
|
||||||
@@ -153,10 +154,11 @@ private fun loadModules(repository: File, targets: List<KonanTarget>): Map<Input
|
|||||||
DeserializedModule(rawModule, data, File(library.libraryFile.path))
|
DeserializedModule(rawModule, data, File(library.libraryFile.path))
|
||||||
}
|
}
|
||||||
|
|
||||||
val rawForwardDeclarationsModule = createKotlinNativeForwardDeclarationsModule(
|
val rawForwardDeclarationsModule =
|
||||||
storageManager = storageManager,
|
createKotlinNativeForwardDeclarationsModule(
|
||||||
builtIns = rawStdlibModule.builtIns
|
storageManager = storageManager,
|
||||||
)
|
builtIns = rawStdlibModule.builtIns
|
||||||
|
)
|
||||||
|
|
||||||
val onlyDeserializedModules = listOf(rawStdlibModule) + otherModules.map { it.module }
|
val onlyDeserializedModules = listOf(rawStdlibModule) + otherModules.map { it.module }
|
||||||
val allModules = onlyDeserializedModules + rawForwardDeclarationsModule
|
val allModules = onlyDeserializedModules + rawForwardDeclarationsModule
|
||||||
|
|||||||
+3
-2
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
|
|
||||||
internal class CommonizationVisitor(
|
internal class CommonizationVisitor(
|
||||||
private val root: CirRootNode
|
private val root: CirRootNode
|
||||||
@@ -89,7 +89,8 @@ internal class CommonizationVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// find out common (and commonized) supertypes
|
// find out common (and commonized) supertypes
|
||||||
val supertypesMap = CommonizedGroupMap<String, CirType>(node.target.size)
|
val supertypesMap =
|
||||||
|
CommonizedGroupMap<String, CirType>(node.target.size)
|
||||||
node.target.forEachIndexed { index, clazz ->
|
node.target.forEachIndexed { index, clazz ->
|
||||||
for (supertype in clazz!!.supertypes) {
|
for (supertype in clazz!!.supertypes) {
|
||||||
supertypesMap[supertype.fqNameWithTypeParameters][index] = supertype
|
supertypesMap[supertype.fqNameWithTypeParameters][index] = supertype
|
||||||
|
|||||||
+1
-1
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isUnderStandardKotlinPackages
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderStandardKotlinPackages
|
||||||
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
|
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
|
||||||
|
|
||||||
interface TypeCommonizer : Commonizer<CirType, CirType> {
|
interface TypeCommonizer : Commonizer<CirType, CirType> {
|
||||||
|
|||||||
+3
-3
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirCommonValueParameter
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirValueParameter
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isNull
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirClassifiersCache
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirClassifiersCache
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirCommonValueParameter
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirType
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirType
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirValueParameter
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isNull
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface ValueParameterCommonizer : Commonizer<CirValueParameter, CirValueParameter> {
|
interface ValueParameterCommonizer : Commonizer<CirValueParameter, CirValueParameter> {
|
||||||
|
|||||||
+16
-6
@@ -6,11 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirClassNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildClassNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildClassNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.storage.NullableLazyValue
|
import org.jetbrains.kotlin.storage.NullableLazyValue
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
@@ -23,10 +23,20 @@ internal fun mergeClasses(
|
|||||||
): CirClassNode {
|
): CirClassNode {
|
||||||
val node = buildClassNode(storageManager, cacheRW, containingDeclarationCommon, classes)
|
val node = buildClassNode(storageManager, cacheRW, containingDeclarationCommon, classes)
|
||||||
|
|
||||||
val constructorsMap = CommonizedGroupMap<ConstructorApproximationKey, ClassConstructorDescriptor>(classes.size)
|
val constructorsMap =
|
||||||
val propertiesMap = CommonizedGroupMap<PropertyApproximationKey, PropertyDescriptor>(classes.size)
|
CommonizedGroupMap<ConstructorApproximationKey, ClassConstructorDescriptor>(
|
||||||
val functionsMap = CommonizedGroupMap<FunctionApproximationKey, SimpleFunctionDescriptor>(classes.size)
|
classes.size
|
||||||
val classesMap = CommonizedGroupMap<Name, ClassDescriptor>(classes.size)
|
)
|
||||||
|
val propertiesMap =
|
||||||
|
CommonizedGroupMap<PropertyApproximationKey, PropertyDescriptor>(
|
||||||
|
classes.size
|
||||||
|
)
|
||||||
|
val functionsMap =
|
||||||
|
CommonizedGroupMap<FunctionApproximationKey, SimpleFunctionDescriptor>(
|
||||||
|
classes.size
|
||||||
|
)
|
||||||
|
val classesMap =
|
||||||
|
CommonizedGroupMap<Name, ClassDescriptor>(classes.size)
|
||||||
|
|
||||||
classes.forEachIndexed { index, clazz ->
|
classes.forEachIndexed { index, clazz ->
|
||||||
clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it }
|
clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it }
|
||||||
|
|||||||
+3
-3
@@ -9,11 +9,11 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.declarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.fqName
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.fqNameWithTypeParameters
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.CLASS
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.CLASS
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.TYPE_ALIAS
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirSimpleTypeKind.TYPE_ALIAS
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.declarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.fqName
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.fqNameWithTypeParameters
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import kotlin.LazyThreadSafetyMode.PUBLICATION
|
import kotlin.LazyThreadSafetyMode.PUBLICATION
|
||||||
|
|||||||
+4
-3
@@ -6,11 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.*
|
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroup
|
import org.jetbrains.kotlin.descriptors.commonizer.OutputTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.core.*
|
import org.jetbrains.kotlin.descriptors.commonizer.core.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.firstNonNull
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroup
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.firstNonNull
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
|||||||
+3
-3
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer
|
import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.fqNameWithTypeParameters
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.fqNameWithTypeParameters
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isBlacklistedDarwinFunction
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isBlacklistedDarwinFunction
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isKniBridgeFunction
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isKniBridgeFunction
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -7,13 +7,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.impl.ExportedForwardDeclarationsPackageFragmentDescriptor
|
import org.jetbrains.kotlin.backend.common.serialization.metadata.impl.ExportedForwardDeclarationsPackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.firstNonNull
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isUnderKotlinNativeSyntheticPackages
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModuleNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirModuleNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildModuleNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildModuleNode
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
@@ -27,7 +24,8 @@ internal fun mergeModules(
|
|||||||
): CirModuleNode {
|
): CirModuleNode {
|
||||||
val node = buildModuleNode(storageManager, modules)
|
val node = buildModuleNode(storageManager, modules)
|
||||||
|
|
||||||
val packageMemberScopesMap = CommonizedGroupMap<FqName, MemberScope>(modules.size)
|
val packageMemberScopesMap =
|
||||||
|
CommonizedGroupMap<FqName, MemberScope>(modules.size)
|
||||||
|
|
||||||
modules.forEachIndexed { index, module ->
|
modules.forEachIndexed { index, module ->
|
||||||
module?.collectNonEmptyPackageMemberScopes { packageFqName, memberScope ->
|
module?.collectNonEmptyPackageMemberScopes { packageFqName, memberScope ->
|
||||||
|
|||||||
+14
-5
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackageNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackageNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildPackageNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildPackageNode
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
@@ -27,10 +27,19 @@ internal fun mergePackages(
|
|||||||
): CirPackageNode {
|
): CirPackageNode {
|
||||||
val node = buildPackageNode(storageManager, moduleName, packageFqName, packageMemberScopes)
|
val node = buildPackageNode(storageManager, moduleName, packageFqName, packageMemberScopes)
|
||||||
|
|
||||||
val propertiesMap = CommonizedGroupMap<PropertyApproximationKey, PropertyDescriptor>(packageMemberScopes.size)
|
val propertiesMap =
|
||||||
val functionsMap = CommonizedGroupMap<FunctionApproximationKey, SimpleFunctionDescriptor>(packageMemberScopes.size)
|
CommonizedGroupMap<PropertyApproximationKey, PropertyDescriptor>(
|
||||||
val classesMap = CommonizedGroupMap<Name, ClassDescriptor>(packageMemberScopes.size)
|
packageMemberScopes.size
|
||||||
val typeAliasesMap = CommonizedGroupMap<Name, TypeAliasDescriptor>(packageMemberScopes.size)
|
)
|
||||||
|
val functionsMap =
|
||||||
|
CommonizedGroupMap<FunctionApproximationKey, SimpleFunctionDescriptor>(
|
||||||
|
packageMemberScopes.size
|
||||||
|
)
|
||||||
|
val classesMap =
|
||||||
|
CommonizedGroupMap<Name, ClassDescriptor>(packageMemberScopes.size)
|
||||||
|
val typeAliasesMap = CommonizedGroupMap<Name, TypeAliasDescriptor>(
|
||||||
|
packageMemberScopes.size
|
||||||
|
)
|
||||||
|
|
||||||
packageMemberScopes.forEachIndexed { index, memberScope ->
|
packageMemberScopes.forEachIndexed { index, memberScope ->
|
||||||
memberScope?.collectMembers(
|
memberScope?.collectMembers(
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildRootNode
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
@@ -19,7 +19,8 @@ internal fun mergeRoots(
|
|||||||
): CirRootNode {
|
): CirRootNode {
|
||||||
val node = buildRootNode(storageManager, modulesByTargets.map { it.first })
|
val node = buildRootNode(storageManager, modulesByTargets.map { it.first })
|
||||||
|
|
||||||
val modulesMap = CommonizedGroupMap<Name, ModuleDescriptor>(modulesByTargets.size)
|
val modulesMap =
|
||||||
|
CommonizedGroupMap<Name, ModuleDescriptor>(modulesByTargets.size)
|
||||||
|
|
||||||
modulesByTargets.forEachIndexed { index, (_, modules) ->
|
modulesByTargets.forEachIndexed { index, (_, modules) ->
|
||||||
for (module in modules) {
|
for (module in modules) {
|
||||||
|
|||||||
@@ -1,149 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 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
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
|
||||||
import org.jetbrains.kotlin.konan.library.KonanFactories.DefaultDeserializedDescriptorFactory
|
|
||||||
import org.jetbrains.kotlin.konan.library.KonanFactories.createDefaultKonanResolvedModuleDescriptorsFactory
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
|
||||||
import org.jetbrains.kotlin.serialization.konan.impl.ForwardDeclarationsFqNames
|
|
||||||
import org.jetbrains.kotlin.serialization.konan.impl.KlibResolvedModuleDescriptorsFactoryImpl
|
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
import org.jetbrains.kotlin.types.TypeUtils.getTypeParameterDescriptorOrNull
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
|
||||||
|
|
||||||
internal fun <T> Sequence<T>.toList(expectedCapacity: Int): List<T> {
|
|
||||||
val result = ArrayList<T>(expectedCapacity)
|
|
||||||
toCollection(result)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
internal inline fun <reified T> Iterable<T?>.firstNonNull() = firstIsInstance<T>()
|
|
||||||
|
|
||||||
internal inline val KotlinType.declarationDescriptor: ClassifierDescriptor
|
|
||||||
get() = (constructor.declarationDescriptor ?: error("No declaration descriptor found for $constructor"))
|
|
||||||
|
|
||||||
internal inline val KotlinType.fqName: FqName
|
|
||||||
get() = declarationDescriptor.fqNameSafe
|
|
||||||
|
|
||||||
internal val KotlinType.fqNameWithTypeParameters: String
|
|
||||||
get() = buildString { buildFqNameWithTypeParameters(this@fqNameWithTypeParameters, HashSet()) }
|
|
||||||
|
|
||||||
private fun StringBuilder.buildFqNameWithTypeParameters(type: KotlinType, exploredTypeParameters: MutableSet<KotlinType>) {
|
|
||||||
append(type.fqName)
|
|
||||||
|
|
||||||
val typeParameterDescriptor = getTypeParameterDescriptorOrNull(type)
|
|
||||||
if (typeParameterDescriptor != null) {
|
|
||||||
// N.B this is type parameter type
|
|
||||||
|
|
||||||
if (exploredTypeParameters.add(type.makeNotNullable())) { // print upper bounds once the first time when type parameter type is met
|
|
||||||
append(":[")
|
|
||||||
typeParameterDescriptor.upperBounds.forEachIndexed { index, upperBound ->
|
|
||||||
if (index > 0)
|
|
||||||
append(",")
|
|
||||||
buildFqNameWithTypeParameters(upperBound, exploredTypeParameters)
|
|
||||||
}
|
|
||||||
append("]")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// N.B. this is classifier type
|
|
||||||
|
|
||||||
val arguments = type.arguments
|
|
||||||
if (arguments.isNotEmpty()) {
|
|
||||||
append("<")
|
|
||||||
arguments.forEachIndexed { index, argument ->
|
|
||||||
if (index > 0)
|
|
||||||
append(",")
|
|
||||||
|
|
||||||
if (argument.isStarProjection)
|
|
||||||
append("*")
|
|
||||||
else {
|
|
||||||
val variance = argument.projectionKind
|
|
||||||
if (variance != Variance.INVARIANT)
|
|
||||||
append(variance).append(" ")
|
|
||||||
buildFqNameWithTypeParameters(argument.type, exploredTypeParameters)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
append(">")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type.isMarkedNullable)
|
|
||||||
append("?")
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun Any?.isNull(): Boolean = this == null
|
|
||||||
|
|
||||||
private val STANDARD_KOTLIN_PACKAGE_PREFIXES = listOf(
|
|
||||||
KotlinBuiltIns.BUILT_INS_PACKAGE_NAME.asString(),
|
|
||||||
"kotlinx"
|
|
||||||
)
|
|
||||||
|
|
||||||
private val KOTLIN_NATIVE_SYNTHETIC_PACKAGES_PREFIXES = ForwardDeclarationsFqNames.syntheticPackages
|
|
||||||
.map { fqName ->
|
|
||||||
check(!fqName.isRoot)
|
|
||||||
fqName.asString()
|
|
||||||
}
|
|
||||||
|
|
||||||
private const val DARWIN_PACKAGE_PREFIX = "platform.darwin"
|
|
||||||
|
|
||||||
internal val FqName.isUnderStandardKotlinPackages: Boolean
|
|
||||||
get() = hasAnyPrefix(STANDARD_KOTLIN_PACKAGE_PREFIXES)
|
|
||||||
|
|
||||||
internal val FqName.isUnderKotlinNativeSyntheticPackages: Boolean
|
|
||||||
get() = hasAnyPrefix(KOTLIN_NATIVE_SYNTHETIC_PACKAGES_PREFIXES)
|
|
||||||
|
|
||||||
internal val FqName.isUnderDarwinPackage: Boolean
|
|
||||||
get() = asString().hasPrefix(DARWIN_PACKAGE_PREFIX)
|
|
||||||
|
|
||||||
private fun FqName.hasAnyPrefix(prefixes: List<String>): Boolean =
|
|
||||||
asString().let { fqName -> prefixes.any(fqName::hasPrefix) }
|
|
||||||
|
|
||||||
private fun String.hasPrefix(prefix: String): Boolean {
|
|
||||||
val lengthDifference = length - prefix.length
|
|
||||||
return when {
|
|
||||||
lengthDifference == 0 -> this == prefix
|
|
||||||
lengthDifference > 0 -> this[prefix.length] == '.' && this.startsWith(prefix)
|
|
||||||
else -> false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal val ModuleDescriptor.packageFragmentProvider
|
|
||||||
get() = (this as ModuleDescriptorImpl).packageFragmentProviderForModuleContentWithoutDependencies
|
|
||||||
|
|
||||||
internal fun createKotlinNativeForwardDeclarationsModule(
|
|
||||||
storageManager: StorageManager,
|
|
||||||
builtIns: KotlinBuiltIns
|
|
||||||
): ModuleDescriptorImpl =
|
|
||||||
(createDefaultKonanResolvedModuleDescriptorsFactory(DefaultDeserializedDescriptorFactory) as KlibResolvedModuleDescriptorsFactoryImpl)
|
|
||||||
.createForwardDeclarationsModule(
|
|
||||||
builtIns = builtIns,
|
|
||||||
storageManager = storageManager
|
|
||||||
)
|
|
||||||
|
|
||||||
// similar to org.jetbrains.kotlin.descriptors.DescriptorUtilKt#resolveClassByFqName, but resolves also type aliases
|
|
||||||
internal fun ModuleDescriptor.resolveClassOrTypeAliasByFqName(
|
|
||||||
fqName: FqName,
|
|
||||||
lookupLocation: LookupLocation
|
|
||||||
): ClassifierDescriptorWithTypeParameters? {
|
|
||||||
if (fqName.isRoot) return null
|
|
||||||
|
|
||||||
(getPackage(fqName.parent()).memberScope.getContributedClassifier(
|
|
||||||
fqName.shortName(),
|
|
||||||
lookupLocation
|
|
||||||
) as? ClassifierDescriptorWithTypeParameters)?.let { return it }
|
|
||||||
|
|
||||||
return (resolveClassOrTypeAliasByFqName(fqName.parent(), lookupLocation) as? ClassDescriptor)
|
|
||||||
?.unsubstitutedInnerClassesScope
|
|
||||||
?.getContributedClassifier(fqName.shortName(), lookupLocation) as? ClassifierDescriptorWithTypeParameters
|
|
||||||
}
|
|
||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* 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
|
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
+6
-2
@@ -3,7 +3,7 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* 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
|
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
||||||
|
|
||||||
/** Fixed-size ordered collection with no extra space that represents a commonized group of same-rank elements */
|
/** Fixed-size ordered collection with no extra space that represents a commonized group of same-rank elements */
|
||||||
internal class CommonizedGroup<T : Any>(
|
internal class CommonizedGroup<T : Any>(
|
||||||
@@ -41,7 +41,11 @@ internal class CommonizedGroup<T : Any>(
|
|||||||
internal class CommonizedGroupMap<K, V : Any>(val size: Int) : Iterable<Map.Entry<K, CommonizedGroup<V>>> {
|
internal class CommonizedGroupMap<K, V : Any>(val size: Int) : Iterable<Map.Entry<K, CommonizedGroup<V>>> {
|
||||||
private val wrapped: MutableMap<K, CommonizedGroup<V>> = HashMap()
|
private val wrapped: MutableMap<K, CommonizedGroup<V>> = HashMap()
|
||||||
|
|
||||||
operator fun get(key: K): CommonizedGroup<V> = wrapped.getOrPut(key) { CommonizedGroup(size) }
|
operator fun get(key: K): CommonizedGroup<V> = wrapped.getOrPut(key) {
|
||||||
|
CommonizedGroup(
|
||||||
|
size
|
||||||
|
)
|
||||||
|
}
|
||||||
fun getOrNull(key: K): CommonizedGroup<V>? = wrapped[key]
|
fun getOrNull(key: K): CommonizedGroup<V>? = wrapped[key]
|
||||||
|
|
||||||
override fun iterator(): Iterator<Map.Entry<K, CommonizedGroup<V>>> = wrapped.iterator()
|
override fun iterator(): Iterator<Map.Entry<K, CommonizedGroup<V>>> = wrapped.iterator()
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.utils
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.serialization.konan.impl.ForwardDeclarationsFqNames
|
||||||
|
|
||||||
|
private val STANDARD_KOTLIN_PACKAGE_PREFIXES = listOf(
|
||||||
|
KotlinBuiltIns.BUILT_INS_PACKAGE_NAME.asString(),
|
||||||
|
"kotlinx"
|
||||||
|
)
|
||||||
|
|
||||||
|
private val KOTLIN_NATIVE_SYNTHETIC_PACKAGES_PREFIXES = ForwardDeclarationsFqNames.syntheticPackages
|
||||||
|
.map { fqName ->
|
||||||
|
check(!fqName.isRoot)
|
||||||
|
fqName.asString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val DARWIN_PACKAGE_PREFIX = "platform.darwin"
|
||||||
|
|
||||||
|
internal val FqName.isUnderStandardKotlinPackages: Boolean
|
||||||
|
get() = hasAnyPrefix(STANDARD_KOTLIN_PACKAGE_PREFIXES)
|
||||||
|
|
||||||
|
internal val FqName.isUnderKotlinNativeSyntheticPackages: Boolean
|
||||||
|
get() = hasAnyPrefix(KOTLIN_NATIVE_SYNTHETIC_PACKAGES_PREFIXES)
|
||||||
|
|
||||||
|
internal val FqName.isUnderDarwinPackage: Boolean
|
||||||
|
get() = asString().hasPrefix(DARWIN_PACKAGE_PREFIX)
|
||||||
|
|
||||||
|
private fun FqName.hasAnyPrefix(prefixes: List<String>): Boolean =
|
||||||
|
asString().let { fqName -> prefixes.any(fqName::hasPrefix) }
|
||||||
|
|
||||||
|
private fun String.hasPrefix(prefix: String): Boolean {
|
||||||
|
val lengthDifference = length - prefix.length
|
||||||
|
return when {
|
||||||
|
lengthDifference == 0 -> this == prefix
|
||||||
|
lengthDifference > 0 -> this[prefix.length] == '.' && this.startsWith(prefix)
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.utils
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
||||||
|
|
||||||
|
internal fun <T> Sequence<T>.toList(expectedCapacity: Int): List<T> {
|
||||||
|
val result = ArrayList<T>(expectedCapacity)
|
||||||
|
toCollection(result)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
internal inline fun <reified T> Iterable<T?>.firstNonNull() = firstIsInstance<T>()
|
||||||
|
|
||||||
|
internal fun Any?.isNull(): Boolean = this == null
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.utils
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
|
import org.jetbrains.kotlin.konan.library.KonanFactories.DefaultDeserializedDescriptorFactory
|
||||||
|
import org.jetbrains.kotlin.konan.library.KonanFactories.createDefaultKonanResolvedModuleDescriptorsFactory
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.serialization.konan.impl.KlibResolvedModuleDescriptorsFactoryImpl
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
|
internal val ModuleDescriptor.packageFragmentProvider
|
||||||
|
get() = (this as ModuleDescriptorImpl).packageFragmentProviderForModuleContentWithoutDependencies
|
||||||
|
|
||||||
|
internal fun createKotlinNativeForwardDeclarationsModule(
|
||||||
|
storageManager: StorageManager,
|
||||||
|
builtIns: KotlinBuiltIns
|
||||||
|
): ModuleDescriptorImpl =
|
||||||
|
(createDefaultKonanResolvedModuleDescriptorsFactory(DefaultDeserializedDescriptorFactory) as KlibResolvedModuleDescriptorsFactoryImpl)
|
||||||
|
.createForwardDeclarationsModule(
|
||||||
|
builtIns = builtIns,
|
||||||
|
storageManager = storageManager
|
||||||
|
)
|
||||||
|
|
||||||
|
// similar to org.jetbrains.kotlin.descriptors.DescriptorUtilKt#resolveClassByFqName, but resolves also type aliases
|
||||||
|
internal fun ModuleDescriptor.resolveClassOrTypeAliasByFqName(
|
||||||
|
fqName: FqName,
|
||||||
|
lookupLocation: LookupLocation
|
||||||
|
): ClassifierDescriptorWithTypeParameters? {
|
||||||
|
if (fqName.isRoot) return null
|
||||||
|
|
||||||
|
(getPackage(fqName.parent()).memberScope.getContributedClassifier(
|
||||||
|
fqName.shortName(),
|
||||||
|
lookupLocation
|
||||||
|
) as? ClassifierDescriptorWithTypeParameters)?.let { return it }
|
||||||
|
|
||||||
|
return (resolveClassOrTypeAliasByFqName(fqName.parent(), lookupLocation) as? ClassDescriptor)
|
||||||
|
?.unsubstitutedInnerClassesScope
|
||||||
|
?.getContributedClassifier(fqName.shortName(), lookupLocation) as? ClassifierDescriptorWithTypeParameters
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.utils
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
|
|
||||||
|
internal inline val KotlinType.declarationDescriptor: ClassifierDescriptor
|
||||||
|
get() = (constructor.declarationDescriptor ?: error("No declaration descriptor found for $constructor"))
|
||||||
|
|
||||||
|
internal inline val KotlinType.fqName: FqName
|
||||||
|
get() = declarationDescriptor.fqNameSafe
|
||||||
|
|
||||||
|
internal val KotlinType.fqNameWithTypeParameters: String
|
||||||
|
get() = buildString { buildFqNameWithTypeParameters(this@fqNameWithTypeParameters, HashSet()) }
|
||||||
|
|
||||||
|
private fun StringBuilder.buildFqNameWithTypeParameters(type: KotlinType, exploredTypeParameters: MutableSet<KotlinType>) {
|
||||||
|
append(type.fqName)
|
||||||
|
|
||||||
|
val typeParameterDescriptor = TypeUtils.getTypeParameterDescriptorOrNull(type)
|
||||||
|
if (typeParameterDescriptor != null) {
|
||||||
|
// N.B this is type parameter type
|
||||||
|
|
||||||
|
if (exploredTypeParameters.add(type.makeNotNullable())) { // print upper bounds once the first time when type parameter type is met
|
||||||
|
append(":[")
|
||||||
|
typeParameterDescriptor.upperBounds.forEachIndexed { index, upperBound ->
|
||||||
|
if (index > 0)
|
||||||
|
append(",")
|
||||||
|
buildFqNameWithTypeParameters(upperBound, exploredTypeParameters)
|
||||||
|
}
|
||||||
|
append("]")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// N.B. this is classifier type
|
||||||
|
|
||||||
|
val arguments = type.arguments
|
||||||
|
if (arguments.isNotEmpty()) {
|
||||||
|
append("<")
|
||||||
|
arguments.forEachIndexed { index, argument ->
|
||||||
|
if (index > 0)
|
||||||
|
append(",")
|
||||||
|
|
||||||
|
if (argument.isStarProjection)
|
||||||
|
append("*")
|
||||||
|
else {
|
||||||
|
val variance = argument.projectionKind
|
||||||
|
if (variance != Variance.INVARIANT)
|
||||||
|
append(variance).append(" ")
|
||||||
|
buildFqNameWithTypeParameters(argument.type, exploredTypeParameters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
append(">")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type.isMarkedNullable)
|
||||||
|
append("?")
|
||||||
|
}
|
||||||
+5
-3
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.descriptors.commonizer.core
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizedGroupMap
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.ClassifiersCacheImpl
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirType
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirType
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildClassNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildClassNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.mockClassType
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.mockClassType
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.mockTAType
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.mockTAType
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -369,8 +369,10 @@ class DefaultTypeCommonizerTest : AbstractCommonizerTest<CirType, CirType>() {
|
|||||||
private fun prepareCache(variants: Array<out KotlinType>) {
|
private fun prepareCache(variants: Array<out KotlinType>) {
|
||||||
check(variants.isNotEmpty())
|
check(variants.isNotEmpty())
|
||||||
|
|
||||||
val classesMap = CommonizedGroupMap<FqName, ClassDescriptor>(variants.size)
|
val classesMap =
|
||||||
val typeAliasesMap = CommonizedGroupMap<FqName, TypeAliasDescriptor>(variants.size)
|
CommonizedGroupMap<FqName, ClassDescriptor>(variants.size)
|
||||||
|
val typeAliasesMap =
|
||||||
|
CommonizedGroupMap<FqName, TypeAliasDescriptor>(variants.size)
|
||||||
|
|
||||||
fun recurse(type: KotlinType, index: Int) {
|
fun recurse(type: KotlinType, index: Int) {
|
||||||
@Suppress("MoveVariableDeclarationIntoWhen")
|
@Suppress("MoveVariableDeclarationIntoWhen")
|
||||||
|
|||||||
-3
@@ -7,9 +7,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.utils
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.fqName
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.fqNameWithTypeParameters
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.isNull
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
|||||||
Reference in New Issue
Block a user