diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index f9b580a2298..e61e30da5e9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -622,13 +622,13 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : } override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): CompositeTransformResult { - if (annotationCall.resolved) return annotationCall.compose() + if (annotationCall.resolveStatus == FirAnnotationResolveStatus.Resolved) return annotationCall.compose() dataFlowAnalyzer.enterAnnotationCall(annotationCall) return withFirArrayOfCallTransformer { (annotationCall.transformChildren(transformer, data) as FirAnnotationCall).also { // TODO: it's temporary incorrect solution until we design resolve and completion for annotation calls it.argumentList.transformArguments(integerLiteralTypeApproximator, null) - it.replaceResolved(true) + it.replaceResolveStatus(FirAnnotationResolveStatus.Resolved) dataFlowAnalyzer.exitAnnotationCall(it) }.compose() } 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 071a6b80711..493a76bf6a9 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 @@ -22,7 +22,7 @@ abstract class FirAnnotationCall : FirExpression(), FirCall { abstract override val argumentList: FirArgumentList abstract val useSiteTarget: AnnotationUseSiteTarget? abstract val annotationTypeRef: FirTypeRef - abstract val resolved: Boolean + abstract val resolveStatus: FirAnnotationResolveStatus override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnnotationCall(this, data) @@ -30,7 +30,7 @@ abstract class FirAnnotationCall : FirExpression(), FirCall { abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) - abstract fun replaceResolved(newResolved: Boolean) + abstract fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirAnnotationCall 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 95059302c06..7a5b1ae8c4d 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 @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder @@ -31,6 +32,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, override var argumentList: FirArgumentList = FirEmptyArgumentList var useSiteTarget: AnnotationUseSiteTarget? = null lateinit var annotationTypeRef: FirTypeRef + var resolveStatus: FirAnnotationResolveStatus = FirAnnotationResolveStatus.Unresolved override fun build(): FirAnnotationCall { return FirAnnotationCallImpl( @@ -39,6 +41,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, argumentList, useSiteTarget, annotationTypeRef, + resolveStatus, ) } 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 7721b1cdf4b..6902dfd4b67 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.* @@ -23,9 +24,9 @@ internal class FirAnnotationCallImpl( override var argumentList: FirArgumentList, override val useSiteTarget: AnnotationUseSiteTarget?, override var annotationTypeRef: FirTypeRef, + override var resolveStatus: FirAnnotationResolveStatus, ) : FirAnnotationCall() { override val typeRef: FirTypeRef get() = annotationTypeRef - override var resolved: Boolean = false override fun acceptChildren(visitor: FirVisitor, data: D) { annotations.forEach { it.accept(visitor, data) } @@ -56,7 +57,7 @@ internal class FirAnnotationCallImpl( argumentList = newArgumentList } - override fun replaceResolved(newResolved: Boolean) { - resolved = newResolved + override fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) { + resolveStatus = newResolveStatus } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationResolveStatus.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationResolveStatus.kt new file mode 100644 index 00000000000..f5aa757d9f6 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationResolveStatus.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions + +enum class FirAnnotationResolveStatus { + Unresolved, + PartiallyResolved, // only literals, annotations, class literals and enums + Resolved +} \ No newline at end of file diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index 64480d89a7d..ada2e367243 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -95,6 +95,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree default("argumentList") { value = "FirEmptyArgumentList" } + default("resolveStatus", "FirAnnotationResolveStatus.Unresolved") useTypes(emptyArgumentListType) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index e1a513449a4..0454d8fe186 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -70,8 +70,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() value = "annotationTypeRef" withGetter = true } - - defaultFalse("resolved") } impl(arrayOfCall) 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 4daf0fab5da..73f16e69208 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 @@ -413,7 +413,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild annotationCall.configure { +field("useSiteTarget", annotationUseSiteTargetType, nullable = true) +field("annotationTypeRef", typeRef).withTransform() - +booleanField("resolved", withReplace = true) + +field("resolveStatus", annotationResolveStatusType, withReplace = true) } arraySetCall.configure { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt index f91006fb090..a46f0e9e852 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt @@ -83,3 +83,4 @@ val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl") val firImplementationDetailType = generatedType("FirImplementationDetail") val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin") val declarationAttributesType = generatedType("declarations", "FirDeclarationAttributes") +val annotationResolveStatusType = generatedType("expressions", "FirAnnotationResolveStatus") \ No newline at end of file