[Commonizer] Fix: Skip KNI bridge functions
This commit is contained in:
+3
-3
@@ -31,9 +31,9 @@ internal fun mergeClasses(
|
|||||||
classes.forEachIndexed { index, clazz ->
|
classes.forEachIndexed { index, clazz ->
|
||||||
clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it }
|
clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it }
|
||||||
clazz?.unsubstitutedMemberScope?.collectMembers(
|
clazz?.unsubstitutedMemberScope?.collectMembers(
|
||||||
CallableMemberCollector<PropertyDescriptor> { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
||||||
CallableMemberCollector<SimpleFunctionDescriptor> { functionsMap[FunctionApproximationKey(it)][index] = it },
|
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
||||||
Collector<ClassDescriptor> { classesMap[it.name][index] = it }
|
ClassCollector { classesMap[it.name][index] = it }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-4
@@ -19,7 +19,7 @@ internal fun MemberScope.collectMembers(vararg collectors: (DeclarationDescripto
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("FunctionName")
|
@Suppress("FunctionName")
|
||||||
internal inline fun <reified T : DeclarationDescriptor> Collector(
|
private inline fun <reified T : DeclarationDescriptor> Collector(
|
||||||
crossinline typedCollector: (T) -> Unit
|
crossinline typedCollector: (T) -> Unit
|
||||||
): (DeclarationDescriptor) -> Boolean = { candidate ->
|
): (DeclarationDescriptor) -> Boolean = { candidate ->
|
||||||
if (candidate is T) {
|
if (candidate is T) {
|
||||||
@@ -30,13 +30,31 @@ internal inline fun <reified T : DeclarationDescriptor> Collector(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("FunctionName")
|
@Suppress("FunctionName")
|
||||||
internal inline fun <reified T : CallableMemberDescriptor> CallableMemberCollector(
|
internal inline fun ClassCollector(
|
||||||
crossinline typedCollector: (T) -> Unit
|
crossinline typedCollector: (ClassDescriptor) -> Unit
|
||||||
): (DeclarationDescriptor) -> Boolean = Collector<T> { candidate ->
|
): (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<PropertyDescriptor> { candidate ->
|
||||||
if (candidate.kind.isReal) // omit fake overrides
|
if (candidate.kind.isReal) // omit fake overrides
|
||||||
typedCollector(candidate)
|
typedCollector(candidate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("FunctionName")
|
||||||
|
internal inline fun FunctionCollector(
|
||||||
|
crossinline typedCollector: (SimpleFunctionDescriptor) -> Unit
|
||||||
|
): (DeclarationDescriptor) -> Boolean = Collector<SimpleFunctionDescriptor> { candidate ->
|
||||||
|
if (candidate.kind.isReal && !candidate.name.asString().startsWith("kniBridge"))
|
||||||
|
typedCollector(candidate)
|
||||||
|
}
|
||||||
|
|
||||||
/** Used for approximation of [PropertyDescriptor]s before running concrete [Commonizer]s */
|
/** Used for approximation of [PropertyDescriptor]s before running concrete [Commonizer]s */
|
||||||
internal data class PropertyApproximationKey(
|
internal data class PropertyApproximationKey(
|
||||||
val name: Name,
|
val name: Name,
|
||||||
|
|||||||
+4
-4
@@ -34,10 +34,10 @@ internal fun mergePackages(
|
|||||||
|
|
||||||
packageMemberScopes.forEachIndexed { index, memberScope ->
|
packageMemberScopes.forEachIndexed { index, memberScope ->
|
||||||
memberScope?.collectMembers(
|
memberScope?.collectMembers(
|
||||||
CallableMemberCollector<PropertyDescriptor> { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
||||||
CallableMemberCollector<SimpleFunctionDescriptor> { functionsMap[FunctionApproximationKey(it)][index] = it },
|
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
||||||
Collector<ClassDescriptor> { classesMap[it.name][index] = it },
|
ClassCollector { classesMap[it.name][index] = it },
|
||||||
Collector<TypeAliasDescriptor> { typeAliasesMap[it.name][index] = it }
|
TypeAliasCollector { typeAliasesMap[it.name][index] = it }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-8
@@ -76,10 +76,10 @@ internal class ComparingDeclarationsVisitor(
|
|||||||
val expectedTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
|
val expectedTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
|
||||||
|
|
||||||
expected.collectMembers(
|
expected.collectMembers(
|
||||||
CallableMemberCollector<PropertyDescriptor> { expectedProperties[PropertyApproximationKey(it)] = it },
|
PropertyCollector { expectedProperties[PropertyApproximationKey(it)] = it },
|
||||||
CallableMemberCollector<SimpleFunctionDescriptor> { expectedFunctions[FunctionApproximationKey(it)] = it },
|
FunctionCollector { expectedFunctions[FunctionApproximationKey(it)] = it },
|
||||||
Collector<ClassDescriptor> { expectedClasses[it.fqNameSafe] = it },
|
ClassCollector { expectedClasses[it.fqNameSafe] = it },
|
||||||
Collector<TypeAliasDescriptor> { expectedTypeAliases[it.fqNameSafe] = it }
|
TypeAliasCollector { expectedTypeAliases[it.fqNameSafe] = it }
|
||||||
)
|
)
|
||||||
|
|
||||||
val actualProperties = mutableMapOf<PropertyApproximationKey, PropertyDescriptor>()
|
val actualProperties = mutableMapOf<PropertyApproximationKey, PropertyDescriptor>()
|
||||||
@@ -88,10 +88,10 @@ internal class ComparingDeclarationsVisitor(
|
|||||||
val actualTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
|
val actualTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
|
||||||
|
|
||||||
actual.collectMembers(
|
actual.collectMembers(
|
||||||
CallableMemberCollector<PropertyDescriptor> { actualProperties[PropertyApproximationKey(it)] = it },
|
PropertyCollector { actualProperties[PropertyApproximationKey(it)] = it },
|
||||||
CallableMemberCollector<SimpleFunctionDescriptor> { actualFunctions[FunctionApproximationKey(it)] = it },
|
FunctionCollector { actualFunctions[FunctionApproximationKey(it)] = it },
|
||||||
Collector<ClassDescriptor> { actualClasses[it.fqNameSafe] = it },
|
ClassCollector { actualClasses[it.fqNameSafe] = it },
|
||||||
Collector<TypeAliasDescriptor> { actualTypeAliases[it.fqNameSafe] = it }
|
TypeAliasCollector { actualTypeAliases[it.fqNameSafe] = it }
|
||||||
)
|
)
|
||||||
|
|
||||||
context.assertSetsEqual(expectedProperties.keys, actualProperties.keys, "sets of properties")
|
context.assertSetsEqual(expectedProperties.keys, actualProperties.keys, "sets of properties")
|
||||||
|
|||||||
Reference in New Issue
Block a user