[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
This commit is contained in:
committed by
Space Team
parent
1d5ab8c24f
commit
6eca9fe3a9
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitAnnotationCall(this, data)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+4
@@ -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()
|
||||
}
|
||||
|
||||
+3
@@ -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<FirTypeProjection> = 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,
|
||||
)
|
||||
|
||||
+2
@@ -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?
|
||||
|
||||
+2
@@ -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<FirTypeProjection>,
|
||||
override var argumentList: FirArgumentList,
|
||||
override var calleeReference: FirReference,
|
||||
override val containingDeclarationSymbol: FirBasedSymbol<*>,
|
||||
override val diagnostic: ConeDiagnostic,
|
||||
override var argumentMapping: FirAnnotationArgumentMapping,
|
||||
) : FirErrorAnnotationCall() {
|
||||
|
||||
+3
@@ -540,6 +540,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
annotationCall.configure {
|
||||
+field("argumentMapping", annotationArgumentMapping, withReplace = true)
|
||||
+field("annotationResolvePhase", annotationResolvePhaseType, withReplace = true)
|
||||
+field("containingDeclarationSymbol", firBasedSymbolType.withArgs(TypeRef.Star)).apply {
|
||||
withBindThis = false
|
||||
}
|
||||
}
|
||||
|
||||
errorAnnotationCall.configure {
|
||||
|
||||
Reference in New Issue
Block a user