From ca350e64c2f06de1574bf6f8e9c42360e2a40805 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 25 Apr 2019 14:11:32 +0300 Subject: [PATCH] FIR deserializer: add proper container class id to nested class members --- .../fir/deserialization/ClassDeserialization.kt | 12 ++++++++---- .../fir/deserialization/FirMemberDeserializer.kt | 3 ++- .../resolve/testData/resolve/stdlib/companionLoad.kt | 3 +++ .../testData/resolve/stdlib/companionLoad.txt | 4 ++++ .../fir/FirResolveTestCaseWithStdlibGenerated.java | 5 +++++ 5 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 compiler/fir/resolve/testData/resolve/stdlib/companionLoad.kt create mode 100644 compiler/fir/resolve/testData/resolve/stdlib/companionLoad.txt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index 8e7e15ba644..533087c4c44 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -44,10 +44,14 @@ fun deserializeClassToSymbol( ).apply { val context = - parentContext?.childContext(classProto.typeParameterList, nameResolver, TypeTable(classProto.typeTable)) - ?: FirDeserializationContext.createForClass( - classId, classProto, nameResolver, session, FirBuiltinAnnotationDeserializer(session, nameResolver) - ) + parentContext?.childContext( + classProto.typeParameterList, + nameResolver, + TypeTable(classProto.typeTable), + classId.relativeClassName + ) ?: FirDeserializationContext.createForClass( + classId, classProto, nameResolver, session, FirBuiltinAnnotationDeserializer(session, nameResolver) + ) typeParameters += context.typeDeserializer.ownTypeParameters.map { it.firUnsafe() } annotations += context.annotationDeserializer.loadClassAnnotations(classProto) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index f441e72ef8e..57acb421153 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -43,7 +43,8 @@ class FirDeserializationContext( fun childContext( typeParameterProtos: List, nameResolver: NameResolver = this.nameResolver, - typeTable: TypeTable = this.typeTable + typeTable: TypeTable = this.typeTable, + relativeClassName: FqName? = this.relativeClassName ): FirDeserializationContext = FirDeserializationContext( nameResolver, typeTable, versionRequirementTable, session, packageFqName, relativeClassName, FirTypeDeserializer( diff --git a/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.kt b/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.kt new file mode 100644 index 00000000000..9167a885985 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.kt @@ -0,0 +1,3 @@ +fun main() { + val y = Int.MAX_VALUE +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.txt b/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.txt new file mode 100644 index 00000000000..c92d72e386a --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/companionLoad.txt @@ -0,0 +1,4 @@ +FILE: companionLoad.kt + public final fun main(): R|kotlin/Unit| { + lval y: R|kotlin/Int| = R|kotlin/Int|.R|kotlin/Int.Companion.MAX_VALUE| + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseWithStdlibGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseWithStdlibGenerated.java index 5f5135b9f77..741c06e4d4d 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseWithStdlibGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseWithStdlibGenerated.java @@ -34,6 +34,11 @@ public class FirResolveTestCaseWithStdlibGenerated extends AbstractFirResolveTes runTest("compiler/fir/resolve/testData/resolve/stdlib/arrayFirstOrNull.kt"); } + @TestMetadata("companionLoad.kt") + public void testCompanionLoad() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/stdlib/companionLoad.kt"); + } + @TestMetadata("components.kt") public void testComponents() throws Exception { runTest("compiler/fir/resolve/testData/resolve/stdlib/components.kt");