diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index 36ba8eb362f..ef1e0e07d38 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag +import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol @@ -89,9 +90,11 @@ class FirTypeDeserializer( } } - private fun computeClassifier(fqNameIndex: Int): ConeClassLikeLookupTag? { + private fun computeClassifier(fqNameIndex: Int): ConeClassLikeLookupTag { try { - val id = nameResolver.getClassId(fqNameIndex) + // We can't just load local types as is, because later we will get an exception + // while trying to get corresponding FIR class + val id = nameResolver.getClassId(fqNameIndex).takeIf { !it.isLocal } ?: StandardClassIds.Any return ConeClassLikeLookupTagImpl(id) } catch (e: Throwable) { throw RuntimeException("Looking up for ${nameResolver.getClassId(fqNameIndex)}", e) diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java index a70fd85ae8c..20d9e73b0c6 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java @@ -405,6 +405,11 @@ public class FirCompileKotlinAgainstKotlinTestGenerated extends AbstractFirCompi KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @TestMetadata("AnonymousObjectInProperty.kt") + public void testAnonymousObjectInProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt"); + } + @TestMetadata("LibraryProperty.kt") public void testLibraryProperty() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); diff --git a/compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt b/compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt new file mode 100644 index 00000000000..541d2fa4276 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt @@ -0,0 +1,18 @@ +// TARGET_BACKEND: JVM +// FILE: A.kt + +abstract class A { + private val x = object { + fun foo() = "OK" + } + + protected val y = x.foo() +} + +// FILE: B.kt + +class B : A() { + val z = y +} + +fun box() = B().z \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index ca782f86282..22b1fae4578 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -410,6 +410,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @TestMetadata("AnonymousObjectInProperty.kt") + public void testAnonymousObjectInProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt"); + } + @TestMetadata("LibraryProperty.kt") public void testLibraryProperty() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java index 934a3e50494..4bc3662dc19 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -405,6 +405,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @TestMetadata("AnonymousObjectInProperty.kt") + public void testAnonymousObjectInProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt"); + } + @TestMetadata("LibraryProperty.kt") public void testLibraryProperty() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java index 2a67be36af2..7e6975e2b9a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java @@ -405,6 +405,11 @@ public class JvmIrAgainstOldBoxTestGenerated extends AbstractJvmIrAgainstOldBoxT KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD, true); } + @TestMetadata("AnonymousObjectInProperty.kt") + public void testAnonymousObjectInProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt"); + } + @TestMetadata("LibraryProperty.kt") public void testLibraryProperty() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java index 5004645338e..0cce1de9307 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java @@ -405,6 +405,11 @@ public class JvmOldAgainstIrBoxTestGenerated extends AbstractJvmOldAgainstIrBoxT KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR, true); } + @TestMetadata("AnonymousObjectInProperty.kt") + public void testAnonymousObjectInProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/AnonymousObjectInProperty.kt"); + } + @TestMetadata("LibraryProperty.kt") public void testLibraryProperty() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt");