From f473b88e4789c0659b1037b9cb242685f8d76e23 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Wed, 17 Feb 2021 19:42:16 +0300 Subject: [PATCH] [Commonizer] Nicer API for CirProvidedClassifiers --- .../kotlin/descriptors/commonizer/facade.kt | 4 +- .../mergedtree/CirCompositeClassifiers.kt | 14 ------ .../mergedtree/CirProvidedClassifiers.kt | 47 +++++++++++++++++++ ....kt => CirProvidedClassifiersByModules.kt} | 7 +-- .../mergedtree/classifierContainers.kt | 16 +------ 5 files changed, 51 insertions(+), 37 deletions(-) delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirCompositeClassifiers.kt create mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiers.kt rename native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/{CirLoadedClassifiers.kt => CirProvidedClassifiersByModules.kt} (89%) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/facade.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/facade.kt index 5e5ea0902ef..cfe4c416e41 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/facade.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/facade.kt @@ -41,9 +41,9 @@ private fun mergeAndCommonize(storageManager: StorageManager, parameters: Common val classifiers = CirKnownClassifiers( commonizedNodes = CirCommonizedClassifierNodes.default(), forwardDeclarations = CirForwardDeclarations.default(), - commonDependencies = CirCompositeClassifiers( + commonDependencies = CirProvidedClassifiers.of( CirFictitiousFunctionClassifiers, - CirLoadedClassifiers.from(parameters.dependencyModulesProvider) + CirProvidedClassifiers.by(parameters.dependencyModulesProvider) ) ) val mergeResult = CirTreeMerger(storageManager, classifiers, parameters).merge() diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirCompositeClassifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirCompositeClassifiers.kt deleted file mode 100644 index b92faa5a278..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirCompositeClassifiers.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2010-2021 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.CirEntityId - -class CirCompositeClassifiers(private val delegates: List) : CirProvidedClassifiers { - constructor(vararg delegates: CirProvidedClassifiers) : this(delegates.toList()) - - override fun hasClassifier(classifierId: CirEntityId): Boolean = delegates.any { it.hasClassifier(classifierId) } -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiers.kt new file mode 100644 index 00000000000..46c9de53303 --- /dev/null +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiers.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2021 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.ModulesProvider +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId + +/** A set of classes and type aliases provided by libraries (either the libraries to commonize, or their dependency libraries)/ */ +interface CirProvidedClassifiers { + fun hasClassifier(classifierId: CirEntityId): Boolean + + // TODO: implement later + //fun classifier(classifierId: ClassId): Any? + + object EMPTY : CirProvidedClassifiers { + override fun hasClassifier(classifierId: CirEntityId) = false + } + + private class CompositeClassifiers(val delegates: List) : CirProvidedClassifiers { + override fun hasClassifier(classifierId: CirEntityId) = delegates.any { it.hasClassifier(classifierId) } + } + + companion object { + fun of(vararg delegates: CirProvidedClassifiers): CirProvidedClassifiers { + val unwrappedDelegates: List = delegates.fold(ArrayList()) { acc, delegate -> + when (delegate) { + EMPTY -> Unit + is CompositeClassifiers -> acc.addAll(delegate.delegates) + else -> acc.add(delegate) + } + acc + } + + return when (unwrappedDelegates.size) { + 0 -> EMPTY + 1 -> unwrappedDelegates.first() + else -> CompositeClassifiers(unwrappedDelegates) + } + } + + fun by(modulesProvider: ModulesProvider?): CirProvidedClassifiers = + if (modulesProvider != null) CirProvidedClassifiersByModules(modulesProvider) else EMPTY + } +} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirLoadedClassifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiersByModules.kt similarity index 89% rename from native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirLoadedClassifiers.kt rename to native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiersByModules.kt index 60a0275655c..b28a1cb23b3 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirLoadedClassifiers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/CirProvidedClassifiersByModules.kt @@ -14,15 +14,10 @@ import org.jetbrains.kotlin.library.metadata.parsePackageFragment import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl -class CirLoadedClassifiers(modulesProvider: ModulesProvider) : CirProvidedClassifiers { +internal class CirProvidedClassifiersByModules(modulesProvider: ModulesProvider) : CirProvidedClassifiers { private val classifiers: Set = loadClassifiers(modulesProvider) override fun hasClassifier(classifierId: CirEntityId): Boolean = classifierId in classifiers - - companion object { - fun from(modulesProvider: ModulesProvider?): CirProvidedClassifiers = - if (modulesProvider != null) CirLoadedClassifiers(modulesProvider) else CirProvidedClassifiers.EMPTY - } } private fun loadClassifiers(modulesProvider: ModulesProvider): Set { diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifierContainers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifierContainers.kt index c1c49332180..38c805d06d4 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifierContainers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifierContainers.kt @@ -67,18 +67,4 @@ interface CirForwardDeclarations { } } } -} - -/** A set of classes and type aliases provided by libraries (either the libraries to commonize, or their dependency libraries)/ */ -interface CirProvidedClassifiers { - fun hasClassifier(classifierId: CirEntityId): Boolean - - // TODO: implement later - //fun classifier(classifierId: ClassId): Any? - - companion object { - internal val EMPTY = object : CirProvidedClassifiers { - override fun hasClassifier(classifierId: CirEntityId) = false - } - } -} +} \ No newline at end of file