[Commonizer] Keep only "common" dependencies in CirKnownClassifiers

This commit is contained in:
Dmitriy Dolovov
2021-02-17 19:27:59 +03:00
parent 2581b67cda
commit 84ce9c612c
4 changed files with 9 additions and 24 deletions
@@ -41,12 +41,9 @@ private fun mergeAndCommonize(storageManager: StorageManager, parameters: Common
val classifiers = CirKnownClassifiers(
commonizedNodes = CirCommonizedClassifierNodes.default(),
forwardDeclarations = CirForwardDeclarations.default(),
dependencies = mapOf(
// for now, supply only common dependency libraries (ex: Kotlin stdlib)
parameters.sharedTarget to CirCompositeClassifiers(
CirFictitiousFunctionClassifiers,
CirLoadedClassifiers.from(parameters.dependencyModulesProvider)
)
commonDependencies = CirCompositeClassifiers(
CirFictitiousFunctionClassifiers,
CirLoadedClassifiers.from(parameters.dependencyModulesProvider)
)
)
val mergeResult = CirTreeMerger(storageManager, classifiers, parameters).merge()
@@ -7,20 +7,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
import gnu.trove.THashMap
import gnu.trove.THashSet
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
import org.jetbrains.kotlin.descriptors.commonizer.SharedCommonizerTarget
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderKotlinNativeSyntheticPackages
class CirKnownClassifiers(
val commonizedNodes: CirCommonizedClassifierNodes,
val forwardDeclarations: CirForwardDeclarations,
val dependencies: Map<CommonizerTarget, CirProvidedClassifiers>
) {
// a shortcut for fast access
val commonDependencies: CirProvidedClassifiers =
dependencies.filterKeys { it is SharedCommonizerTarget }.values.singleOrNull() ?: CirProvidedClassifiers.EMPTY
}
val commonDependencies: CirProvidedClassifiers
)
/** A set of all CIR nodes built for commonized classes and type aliases. */
interface CirCommonizedClassifierNodes {
@@ -7,8 +7,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.commonizer.LeafCommonizerTarget
import org.jetbrains.kotlin.descriptors.commonizer.SharedCommonizerTarget
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirType
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory
@@ -35,11 +33,9 @@ class TypeCommonizerTest : AbstractCommonizerTest<CirType, CirType>() {
classifiers = CirKnownClassifiers(
commonizedNodes = CirCommonizedClassifierNodes.default(),
forwardDeclarations = CirForwardDeclarations.default(),
dependencies = mapOf(
FAKE_SHARED_TARGET to object : CirProvidedClassifiers {
override fun hasClassifier(classifierId: CirEntityId): Boolean = classifierId.packageName.isUnderStandardKotlinPackages
}
)
commonDependencies = object : CirProvidedClassifiers {
override fun hasClassifier(classifierId: CirEntityId): Boolean = classifierId.packageName.isUnderStandardKotlinPackages
}
)
}
@@ -537,8 +533,6 @@ class TypeCommonizerTest : AbstractCommonizerTest<CirType, CirType>() {
fun areEqual(classifiers: CirKnownClassifiers, a: CirType, b: CirType): Boolean =
TypeCommonizer(classifiers).run { commonizeWith(a) && commonizeWith(b) }
private val FAKE_SHARED_TARGET = SharedCommonizerTarget(setOf(LeafCommonizerTarget("a"), LeafCommonizerTarget("b")))
private fun CirKnownClassifiers.classNode(classId: CirEntityId, computation: () -> CirClassNode) =
commonizedNodes.classNode(classId) ?: computation()
@@ -153,7 +153,7 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers(
override fun isExportedForwardDeclaration(classId: CirEntityId) = false
override fun addExportedForwardDeclaration(classId: CirEntityId) = error("This method should not be called")
},
dependencies = emptyMap()
commonDependencies = CirProvidedClassifiers.EMPTY
)
internal class MockModulesProvider private constructor(