diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index ea0005265b3..d7126e474b1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -88,18 +88,20 @@ class KotlinDeserializedJvmSymbolsProvider( private val knownClassNamesInPackage = mutableMapOf?>() - private fun hasTopLevelClassOf(classId: ClassId): Boolean { + // This function returns true if we are sure that no top-level class with this id is available + // If it returns false, it means we can say nothing about this id + private fun hasNoTopLevelClassOf(classId: ClassId): Boolean { val knownNames = knownClassNamesInPackage.getOrPut(classId.packageFqName) { javaClassFinder.knownClassNamesInPackage(classId.packageFqName) } ?: return false - return classId.relativeClassName.topLevelName() in knownNames + return classId.relativeClassName.topLevelName() !in knownNames } private fun computePackagePartsInfos(packageFqName: FqName): List { return packagePartProvider.findPackageParts(packageFqName.asString()).mapNotNull { partName -> val classId = ClassId.topLevel(JvmClassName.byInternalName(partName).fqNameForTopLevelClassMaybeWithDollars) - if (!hasTopLevelClassOf(classId)) return@mapNotNull null + if (hasNoTopLevelClassOf(classId)) return@mapNotNull null val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return@mapNotNull null val header = kotlinJvmBinaryClass.classHeader @@ -308,7 +310,7 @@ class KotlinDeserializedJvmSymbolsProvider( classId: ClassId, parentContext: FirDeserializationContext? = null ): FirRegularClassSymbol? { - if (!hasTopLevelClassOf(classId)) return null + if (hasNoTopLevelClassOf(classId)) return null if (classesCache.containsKey(classId)) return classesCache[classId] if (classId in handledByJava) return null diff --git a/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.kt b/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.kt new file mode 100644 index 00000000000..919b8e65426 --- /dev/null +++ b/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.kt @@ -0,0 +1 @@ +val someList = listOf(1, 2, 3) \ No newline at end of file diff --git a/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.txt b/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.txt new file mode 100644 index 00000000000..58772865a94 --- /dev/null +++ b/idea/testData/fir/multiModule/withStdlib/jvm_dep(stdlib)/Some.txt @@ -0,0 +1,3 @@ +FILE: Some.kt + public final val someList: R|kotlin/collections/List| = R|kotlin/collections/listOf|(Int(1), Int(2), Int(3)) + public get(): R|kotlin/collections/List| diff --git a/idea/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java index 8e36db910a1..b7855837183 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java @@ -122,4 +122,9 @@ public class FirMultiModuleResolveTestGenerated extends AbstractFirMultiModuleRe public void testOverrideWithJava() throws Exception { runTest("idea/testData/fir/multiModule/overrideWithJava/"); } + + @TestMetadata("withStdlib") + public void testWithStdlib() throws Exception { + runTest("idea/testData/fir/multiModule/withStdlib/"); + } }