From 5b3b35cd78d350bd12586f424b177c5f274e99a4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 26 Feb 2020 10:53:01 +0300 Subject: [PATCH] FIR2IR: set "external stub" origin for external enum entries --- .../kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 6 +++++- .../irText/declarations/annotations/fileAnnotations.fir.txt | 2 +- .../annotations/typeAliasesWithAnnotations.fir.txt | 2 +- .../annotations/typeParametersWithAnnotations.fir.txt | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index f8d0128db7d..2c7f1ac9b88 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -967,7 +967,11 @@ class Fir2IrDeclarationStorage( fun getIrValueSymbol(firVariableSymbol: FirVariableSymbol<*>): IrSymbol { return when (val firDeclaration = firVariableSymbol.fir) { is FirEnumEntry -> { - val irEnumEntry = getIrEnumEntry(firDeclaration) + val containingFile = firProvider.getFirCallableContainerFile(firVariableSymbol) + val irEnumEntry = getIrEnumEntry( + firDeclaration, + origin = if (containingFile == null) IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB else IrDeclarationOrigin.DEFINED + ) irSymbolTable.referenceEnumEntry(irEnumEntry.descriptor) } is FirValueParameter -> { diff --git a/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt index 653edf53379..594ef100ab1 100644 --- a/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt @@ -3,7 +3,7 @@ FILE fqName:test fileName:/fileAnnotations.kt A(x = 'File annotation') CLASS ANNOTATION_CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY name:FILE' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:FILE' type=kotlin.annotation.AnnotationTarget) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:test.A CONSTRUCTOR visibility:public <> (x:kotlin.String) returnType:test.A [primary] VALUE_PARAMETER name:x index:0 type:kotlin.String diff --git a/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt index 13c2e6545e1..6abb70b0474 100644 --- a/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt @@ -1,7 +1,7 @@ FILE fqName: fileName:/typeAliasesWithAnnotations.kt CLASS ANNOTATION_CLASS name:TestAnn modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY name:TYPEALIAS' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPEALIAS' type=kotlin.annotation.AnnotationTarget) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.TestAnn CONSTRUCTOR visibility:public <> (x:kotlin.String) returnType:.TestAnn [primary] VALUE_PARAMETER name:x index:0 type:kotlin.String diff --git a/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt index b7119a05697..d7eef04bd13 100644 --- a/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt @@ -1,7 +1,7 @@ FILE fqName: fileName:/typeParametersWithAnnotations.kt CLASS ANNOTATION_CLASS name:Anno modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY name:TYPE_PARAMETER' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPE_PARAMETER' type=kotlin.annotation.AnnotationTarget) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Anno CONSTRUCTOR visibility:public <> () returnType:.Anno [primary] FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]