From 6eca9fe3a900e6287a84d07d84f0d44f6f738864 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 14 Nov 2023 15:28:01 +0100 Subject: [PATCH] [FIR] tree: introduce containingDeclarationSymbol for annotation calls This symbol will be used during resolution to avoid transformation of annotations in the wrong context in the case of FIR node sharing. The symbol should be some containing declaration symbol to be able to answer the question "Are we own this annotation?" during resolution ^KT-63042 --- .../org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt | 2 ++ .../kotlin/fir/expressions/FirErrorAnnotationCall.kt | 2 ++ .../fir/expressions/builder/FirAnnotationCallBuilder.kt | 4 ++++ .../fir/expressions/builder/FirErrorAnnotationCallBuilder.kt | 3 +++ .../kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt | 2 ++ .../kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt | 2 ++ .../jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt | 3 +++ 7 files changed, 18 insertions(+) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt index da189e9d03e..c06c270fa66 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -33,6 +34,7 @@ abstract class FirAnnotationCall : FirAnnotation(), FirCall, FirResolvable { abstract override val calleeReference: FirReference abstract override val argumentMapping: FirAnnotationArgumentMapping abstract val annotationResolvePhase: FirAnnotationResolvePhase + abstract val containingDeclarationSymbol: FirBasedSymbol<*> override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnnotationCall(this, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt index 8aa13a55b4d..069b441de43 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -34,6 +35,7 @@ abstract class FirErrorAnnotationCall : FirAnnotationCall(), FirDiagnosticHolder abstract override val argumentList: FirArgumentList abstract override val calleeReference: FirReference abstract override val annotationResolvePhase: FirAnnotationResolvePhase + abstract override val containingDeclarationSymbol: FirBasedSymbol<*> abstract override val diagnostic: ConeDiagnostic abstract override val argumentMapping: FirAnnotationArgumentMapping diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt index b510929b3af..dd3fa55a363 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotationCallImpl import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -35,6 +36,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, lateinit var calleeReference: FirReference var argumentMapping: FirAnnotationArgumentMapping = FirEmptyAnnotationArgumentMapping var annotationResolvePhase: FirAnnotationResolvePhase = FirAnnotationResolvePhase.Unresolved + lateinit var containingDeclarationSymbol: FirBasedSymbol<*> override fun build(): FirAnnotationCall { return FirAnnotationCallImpl( @@ -46,6 +48,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, calleeReference, argumentMapping, annotationResolvePhase, + containingDeclarationSymbol, ) } @@ -83,5 +86,6 @@ inline fun buildAnnotationCallCopy(original: FirAnnotationCall, init: FirAnnotat copyBuilder.calleeReference = original.calleeReference copyBuilder.argumentMapping = original.argumentMapping copyBuilder.annotationResolvePhase = original.annotationResolvePhase + copyBuilder.containingDeclarationSymbol = original.containingDeclarationSymbol return copyBuilder.apply(init).build() } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt index 90604710b24..2a5735fbf85 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping import org.jetbrains.kotlin.fir.expressions.impl.FirErrorAnnotationCallImpl import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -34,6 +35,7 @@ class FirErrorAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuil val typeArguments: MutableList = mutableListOf() override var argumentList: FirArgumentList = FirEmptyArgumentList lateinit var calleeReference: FirReference + lateinit var containingDeclarationSymbol: FirBasedSymbol<*> lateinit var diagnostic: ConeDiagnostic var argumentMapping: FirAnnotationArgumentMapping = FirEmptyAnnotationArgumentMapping @@ -45,6 +47,7 @@ class FirErrorAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuil typeArguments.toMutableOrEmpty(), argumentList, calleeReference, + containingDeclarationSymbol, diagnostic, argumentMapping, ) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt index 222c1e15d85..68f89600aa4 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.MutableOrEmptyList import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -33,6 +34,7 @@ internal class FirAnnotationCallImpl( override var calleeReference: FirReference, override var argumentMapping: FirAnnotationArgumentMapping, override var annotationResolvePhase: FirAnnotationResolvePhase, + override val containingDeclarationSymbol: FirBasedSymbol<*>, ) : FirAnnotationCall() { @OptIn(UnresolvedExpressionTypeAccess::class) override val coneTypeOrNull: ConeKotlinType? diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt index b83a935e34d..726b950d4be 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -32,6 +33,7 @@ internal class FirErrorAnnotationCallImpl( override var typeArguments: MutableOrEmptyList, override var argumentList: FirArgumentList, override var calleeReference: FirReference, + override val containingDeclarationSymbol: FirBasedSymbol<*>, override val diagnostic: ConeDiagnostic, override var argumentMapping: FirAnnotationArgumentMapping, ) : FirErrorAnnotationCall() { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 9d6f2bbc333..0abb79a406b 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -540,6 +540,9 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild annotationCall.configure { +field("argumentMapping", annotationArgumentMapping, withReplace = true) +field("annotationResolvePhase", annotationResolvePhaseType, withReplace = true) + +field("containingDeclarationSymbol", firBasedSymbolType.withArgs(TypeRef.Star)).apply { + withBindThis = false + } } errorAnnotationCall.configure {