diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index a0ddad6c233..6665e9766cf 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -33763,6 +33763,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/package/packageLocalClassNotImportedWithDefaultImport.kt"); } + @Test + @TestMetadata("packageOrNestedClass.kt") + public void testPackageOrNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/package/packageOrNestedClass.kt"); + } + @Test @TestMetadata("packageQualifiedMethod.kt") public void testPackageQualifiedMethod() throws Exception { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt index 5a7cf90d955..20230e537f7 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt @@ -108,15 +108,15 @@ class JvmClassFileBasedSymbolProvider( // Nested class of Kotlin class should have been a Kotlin class. return null } - val javaClass = javaFacade.findClass(classId, (result as? KotlinClassFinder.Result.ClassFileContent)?.content) - ?: return null + val knownContent = (result as? KotlinClassFinder.Result.ClassFileContent)?.content + val javaClass = javaFacade.findClass(classId, knownContent) ?: return null return ClassMetadataFindResult.NoMetadata { symbol -> javaFacade.convertJavaClassToFir(symbol, classId.outerClassId?.let(::getClass), javaClass) } } val kotlinClass = result.kotlinJvmBinaryClass - if (kotlinClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null + if (kotlinClass.classHeader.kind != KotlinClassHeader.Kind.CLASS || kotlinClass.classId != classId) return null val data = kotlinClass.classHeader.data ?: return null val strings = kotlinClass.classHeader.strings ?: return null val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings) diff --git a/compiler/testData/codegen/box/package/packageOrNestedClass.kt b/compiler/testData/codegen/box/package/packageOrNestedClass.kt new file mode 100644 index 00000000000..cbfeee44099 --- /dev/null +++ b/compiler/testData/codegen/box/package/packageOrNestedClass.kt @@ -0,0 +1,31 @@ +// TARGET_BACKEND: JVM_IR +// FIR_IDENTICAL + +// MODULE: lib + +// FILE: lib.kt +@file:Suppress("PACKAGE_OR_CLASSIFIER_REDECLARATION") +package lib + +class foo { + class bar { + fun get(): Int = 1 + } +} + +// FILE: lib_foo.kt +@file:Suppress("PACKAGE_OR_CLASSIFIER_REDECLARATION") +package lib.foo + +class bar { + fun get(): Int = 0 +} + +// MODULE: main(lib) + +// FILE: test.kt + +fun box(): String { + val obj = lib.foo.bar() + return if (obj.get() == 0) "OK" else "ERROR" +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 6cc9d07df7f..63a200c3ef8 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -33763,6 +33763,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/package/packageLocalClassNotImportedWithDefaultImport.kt"); } + @Test + @TestMetadata("packageOrNestedClass.kt") + public void testPackageOrNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/package/packageOrNestedClass.kt"); + } + @Test @TestMetadata("packageQualifiedMethod.kt") public void testPackageQualifiedMethod() throws Exception {