Skip to content

Commit e64a8bc

Browse files
committed
Use binary names not fqnames for uniquing IrDeclarations
Otherwise we fall into the trap of confusing the two overloads of `MapsKt.iterator` which have differing jvmnames.
1 parent 57ea34d commit e64a8bc

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import java.util.zip.GZIPOutputStream
1818

1919
class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: String, val sourceFilePath: String, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState, val diagnosticTrapWriter: TrapWriter) {
2020

21-
val externalDeclsDone = HashSet<Pair<FqName, String>>()
21+
val declBinaryNames = HashMap<IrDeclaration, String>()
22+
val externalDeclsDone = HashSet<Pair<String, String>>()
2223
val externalDeclWorkList = ArrayList<Pair<IrDeclaration, String>>()
2324

2425
val propertySignature = ";property"
@@ -29,7 +30,8 @@ class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: Stri
2930
logger.errorElement("External declaration is neither a class, nor a top-level declaration", d)
3031
return false
3132
}
32-
val ret = externalDeclsDone.add(Pair(d.fqNameWhenAvailable!!, signature))
33+
val declBinaryName = declBinaryNames.getOrPut(d) { getIrDeclBinaryName(d) }
34+
val ret = externalDeclsDone.add(Pair(declBinaryName, signature))
3335
if (ret) externalDeclWorkList.add(Pair(d, signature))
3436
return ret
3537
}

0 commit comments

Comments
 (0)