[Commonizer] Fix: Skip KNI bridge functions

This commit is contained in:
Dmitriy Dolovov
2019-10-11 13:27:57 +07:00
parent 0a6c132241
commit f4780206d9
4 changed files with 37 additions and 19 deletions
@@ -31,9 +31,9 @@ internal fun mergeClasses(
classes.forEachIndexed { index, clazz ->
clazz?.constructors?.forEach { constructorsMap[ConstructorApproximationKey(it)][index] = it }
clazz?.unsubstitutedMemberScope?.collectMembers(
CallableMemberCollector<PropertyDescriptor> { propertiesMap[PropertyApproximationKey(it)][index] = it },
CallableMemberCollector<SimpleFunctionDescriptor> { functionsMap[FunctionApproximationKey(it)][index] = it },
Collector<ClassDescriptor> { classesMap[it.name][index] = it }
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
ClassCollector { classesMap[it.name][index] = it }
)
}
@@ -19,7 +19,7 @@ internal fun MemberScope.collectMembers(vararg collectors: (DeclarationDescripto
}
@Suppress("FunctionName")
internal inline fun <reified T : DeclarationDescriptor> Collector(
private inline fun <reified T : DeclarationDescriptor> Collector(
crossinline typedCollector: (T) -> Unit
): (DeclarationDescriptor) -> Boolean = { candidate ->
if (candidate is T) {
@@ -30,13 +30,31 @@ internal inline fun <reified T : DeclarationDescriptor> Collector(
}
@Suppress("FunctionName")
internal inline fun <reified T : CallableMemberDescriptor> CallableMemberCollector(
crossinline typedCollector: (T) -> Unit
): (DeclarationDescriptor) -> Boolean = Collector<T> { 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<PropertyDescriptor> { candidate ->
if (candidate.kind.isReal) // omit fake overrides
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 */
internal data class PropertyApproximationKey(
val name: Name,
@@ -34,10 +34,10 @@ internal fun mergePackages(
packageMemberScopes.forEachIndexed { index, memberScope ->
memberScope?.collectMembers(
CallableMemberCollector<PropertyDescriptor> { propertiesMap[PropertyApproximationKey(it)][index] = it },
CallableMemberCollector<SimpleFunctionDescriptor> { functionsMap[FunctionApproximationKey(it)][index] = it },
Collector<ClassDescriptor> { classesMap[it.name][index] = it },
Collector<TypeAliasDescriptor> { 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 }
)
}
@@ -76,10 +76,10 @@ internal class ComparingDeclarationsVisitor(
val expectedTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
expected.collectMembers(
CallableMemberCollector<PropertyDescriptor> { expectedProperties[PropertyApproximationKey(it)] = it },
CallableMemberCollector<SimpleFunctionDescriptor> { expectedFunctions[FunctionApproximationKey(it)] = it },
Collector<ClassDescriptor> { expectedClasses[it.fqNameSafe] = it },
Collector<TypeAliasDescriptor> { 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<PropertyApproximationKey, PropertyDescriptor>()
@@ -88,10 +88,10 @@ internal class ComparingDeclarationsVisitor(
val actualTypeAliases = mutableMapOf<FqName, TypeAliasDescriptor>()
actual.collectMembers(
CallableMemberCollector<PropertyDescriptor> { actualProperties[PropertyApproximationKey(it)] = it },
CallableMemberCollector<SimpleFunctionDescriptor> { actualFunctions[FunctionApproximationKey(it)] = it },
Collector<ClassDescriptor> { actualClasses[it.fqNameSafe] = it },
Collector<TypeAliasDescriptor> { 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")