[FIR] Fix default constructors in jvm mapped scope

This commit is contained in:
simon.ogorodnik
2020-04-06 23:31:43 +03:00
parent 21ede8b745
commit 861cc6ee20
@@ -44,10 +44,13 @@ class JvmMappedScope(
val jvmSignature = symbol.fir.computeJvmDescriptor() val jvmSignature = symbol.fir.computeJvmDescriptor()
.replace("kotlin/Any", "java/lang/Object") .replace("kotlin/Any", "java/lang/Object")
.replace("kotlin/String", "java/lang/String") .replace("kotlin/String", "java/lang/String")
.replace("kotlin/Throwable", "java/lang/Throwable")
if (jvmSignature !in constructorBlackList) { if (jvmSignature !in constructorBlackList) {
processor(symbol) processor(symbol)
} }
} }
} else {
javaMappedClassUseSiteScope.processDeclaredConstructors(processor)
} }
declaredMemberScope.processDeclaredConstructors(processor) declaredMemberScope.processDeclaredConstructors(processor)
@@ -67,7 +70,17 @@ class JvmMappedScope(
fun isNotEmpty() = !isEmpty() fun isNotEmpty() = !isEmpty()
} }
// NOTE: No-arg constructors
private val additionalConstructorBlackList = setOf(
"java/lang/String.<init>()V",
"java/lang/Throwable.<init>()V",
"java/lang/Throwable.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V",
"java/lang/Throwable.<init>(Ljava/lang/Throwable;)V",
"java/lang/Throwable.<init>(Ljava/lang/String;)V"
)
fun prepareSignatures(klass: FirRegularClass): Signatures { fun prepareSignatures(klass: FirRegularClass): Signatures {
val signaturePrefix = klass.symbol.classId.toString() val signaturePrefix = klass.symbol.classId.toString()
val whiteListSignaturesByName = mutableMapOf<Name, MutableSet<String>>() val whiteListSignaturesByName = mutableMapOf<Name, MutableSet<String>>()
JvmBuiltInsSettings.WHITE_LIST_METHOD_SIGNATURES.filter { signature -> JvmBuiltInsSettings.WHITE_LIST_METHOD_SIGNATURES.filter { signature ->
@@ -79,9 +92,11 @@ class JvmMappedScope(
whiteListSignaturesByName.getOrPut(Name.identifier(it.substringBefore("("))) { mutableSetOf() }.add(it) whiteListSignaturesByName.getOrPut(Name.identifier(it.substringBefore("("))) { mutableSetOf() }.add(it)
} }
val constructorBlackList = JvmBuiltInsSettings.BLACK_LIST_CONSTRUCTOR_SIGNATURES val constructorBlackList =
.filter { it.startsWith(signaturePrefix) } (JvmBuiltInsSettings.BLACK_LIST_CONSTRUCTOR_SIGNATURES + additionalConstructorBlackList)
.mapTo(mutableSetOf()) { it.substring(signaturePrefix.length + 1) } .filter { it.startsWith(signaturePrefix) }
.mapTo(mutableSetOf()) { it.substring(signaturePrefix.length + 1) }
return Signatures(whiteListSignaturesByName, constructorBlackList) return Signatures(whiteListSignaturesByName, constructorBlackList)
} }
} }