diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt index 6326bcb19df..758e12cd7ba 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt @@ -31,9 +31,9 @@ internal fun mergeClasses( classes.forEachIndexed { index, clazz -> clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it } clazz?.unsubstitutedMemberScope?.collectMembers( - CallableMemberCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, - CallableMemberCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, - Collector { classesMap[it.name][index] = it } + PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, + FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, + ClassCollector { classesMap[it.name][index] = it } ) } diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt index b81055cecf6..08a910a7c7b 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt @@ -19,7 +19,7 @@ internal fun MemberScope.collectMembers(vararg collectors: (DeclarationDescripto } @Suppress("FunctionName") -internal inline fun Collector( +private inline fun Collector( crossinline typedCollector: (T) -> Unit ): (DeclarationDescriptor) -> Boolean = { candidate -> if (candidate is T) { @@ -30,13 +30,31 @@ internal inline fun Collector( } @Suppress("FunctionName") -internal inline fun CallableMemberCollector( - crossinline typedCollector: (T) -> Unit -): (DeclarationDescriptor) -> Boolean = Collector { candidate -> +internal inline fun ClassCollector( + crossinline typedCollector: (ClassDescriptor) -> Unit +): (DeclarationDescriptor) -> Boolean = Collector(typedCollector) + +@Suppress("FunctionName") +internal inline fun TypeAliasCollector( + crossinline typedCollector: (TypeAliasDescriptor) -> Unit +): (DeclarationDescriptor) -> Boolean = Collector(typedCollector) + +@Suppress("FunctionName") +internal inline fun PropertyCollector( + crossinline typedCollector: (PropertyDescriptor) -> Unit +): (DeclarationDescriptor) -> Boolean = Collector { candidate -> if (candidate.kind.isReal) // omit fake overrides typedCollector(candidate) } +@Suppress("FunctionName") +internal inline fun FunctionCollector( + crossinline typedCollector: (SimpleFunctionDescriptor) -> Unit +): (DeclarationDescriptor) -> Boolean = Collector { candidate -> + if (candidate.kind.isReal && !candidate.name.asString().startsWith("kniBridge")) + typedCollector(candidate) +} + /** Used for approximation of [PropertyDescriptor]s before running concrete [Commonizer]s */ internal data class PropertyApproximationKey( val name: Name, diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt index 3c7cd7689e0..c5a39eec033 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt @@ -34,10 +34,10 @@ internal fun mergePackages( packageMemberScopes.forEachIndexed { index, memberScope -> memberScope?.collectMembers( - CallableMemberCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, - CallableMemberCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, - Collector { classesMap[it.name][index] = it }, - Collector { typeAliasesMap[it.name][index] = it } + PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, + FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, + ClassCollector { classesMap[it.name][index] = it }, + TypeAliasCollector { typeAliasesMap[it.name][index] = it } ) } diff --git a/konan/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/ComparingDeclarationsVisitor.kt b/konan/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/ComparingDeclarationsVisitor.kt index cde44d55040..186ee3a182e 100644 --- a/konan/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/ComparingDeclarationsVisitor.kt +++ b/konan/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/ComparingDeclarationsVisitor.kt @@ -76,10 +76,10 @@ internal class ComparingDeclarationsVisitor( val expectedTypeAliases = mutableMapOf() expected.collectMembers( - CallableMemberCollector { expectedProperties[PropertyApproximationKey(it)] = it }, - CallableMemberCollector { expectedFunctions[FunctionApproximationKey(it)] = it }, - Collector { expectedClasses[it.fqNameSafe] = it }, - Collector { expectedTypeAliases[it.fqNameSafe] = it } + PropertyCollector { expectedProperties[PropertyApproximationKey(it)] = it }, + FunctionCollector { expectedFunctions[FunctionApproximationKey(it)] = it }, + ClassCollector { expectedClasses[it.fqNameSafe] = it }, + TypeAliasCollector { expectedTypeAliases[it.fqNameSafe] = it } ) val actualProperties = mutableMapOf() @@ -88,10 +88,10 @@ internal class ComparingDeclarationsVisitor( val actualTypeAliases = mutableMapOf() actual.collectMembers( - CallableMemberCollector { actualProperties[PropertyApproximationKey(it)] = it }, - CallableMemberCollector { actualFunctions[FunctionApproximationKey(it)] = it }, - Collector { actualClasses[it.fqNameSafe] = it }, - Collector { actualTypeAliases[it.fqNameSafe] = it } + PropertyCollector { actualProperties[PropertyApproximationKey(it)] = it }, + FunctionCollector { actualFunctions[FunctionApproximationKey(it)] = it }, + ClassCollector { actualClasses[it.fqNameSafe] = it }, + TypeAliasCollector { actualTypeAliases[it.fqNameSafe] = it } ) context.assertSetsEqual(expectedProperties.keys, actualProperties.keys, "sets of properties")