diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt index 22e6ed0a5df..5e1642872eb 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt @@ -1005,9 +1005,10 @@ open class KotlinUsesExtractor( val binaryPath = getContainerSourceBinaryPath(d.containerSource) ?.let { normalizeExternalFileClassBinaryPath(it, fqName) } - ?: "/!unknown-binary-location/${fqName.asString().replace(".", "/")}.class" - val fileId = tw.mkFileId(binaryPath, true) - tw.writeHasLocation(fileClassId, tw.getWholeFileLocation(fileId)) + if (binaryPath != null && shouldUseConcreteExternalFileClassLocation(binaryPath)) { + val fileId = tw.mkFileId(binaryPath, true) + tw.writeHasLocation(fileClassId, tw.getWholeFileLocation(fileId)) + } } return fileClassId } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt index 4027d57e534..7038a2060bb 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt @@ -228,6 +228,12 @@ fun normalizeExternalFileClassBinaryPath(path: String, fqName: FqName): String { return path } +fun shouldUseConcreteExternalFileClassLocation(path: String): Boolean { + val normalizedPath = path.replace('\\', '/') + return normalizedPath.contains("/") && + !normalizedPath.startsWith("/!unknown-binary-location/") +} + fun getJavaEquivalentClassId(c: IrClass) = c.fqNameWhenAvailable?.toUnsafe()?.let { JavaToKotlinClassMap.mapKotlinToJava(it) }