[FIR] Replace resolved flag with resolve status enum for annotation calls
This commit is contained in:
+2
-2
@@ -622,13 +622,13 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): CompositeTransformResult<FirStatement> {
|
override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): CompositeTransformResult<FirStatement> {
|
||||||
if (annotationCall.resolved) return annotationCall.compose()
|
if (annotationCall.resolveStatus == FirAnnotationResolveStatus.Resolved) return annotationCall.compose()
|
||||||
dataFlowAnalyzer.enterAnnotationCall(annotationCall)
|
dataFlowAnalyzer.enterAnnotationCall(annotationCall)
|
||||||
return withFirArrayOfCallTransformer {
|
return withFirArrayOfCallTransformer {
|
||||||
(annotationCall.transformChildren(transformer, data) as FirAnnotationCall).also {
|
(annotationCall.transformChildren(transformer, data) as FirAnnotationCall).also {
|
||||||
// TODO: it's temporary incorrect solution until we design resolve and completion for annotation calls
|
// TODO: it's temporary incorrect solution until we design resolve and completion for annotation calls
|
||||||
it.argumentList.transformArguments(integerLiteralTypeApproximator, null)
|
it.argumentList.transformArguments(integerLiteralTypeApproximator, null)
|
||||||
it.replaceResolved(true)
|
it.replaceResolveStatus(FirAnnotationResolveStatus.Resolved)
|
||||||
dataFlowAnalyzer.exitAnnotationCall(it)
|
dataFlowAnalyzer.exitAnnotationCall(it)
|
||||||
}.compose()
|
}.compose()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ abstract class FirAnnotationCall : FirExpression(), FirCall {
|
|||||||
abstract override val argumentList: FirArgumentList
|
abstract override val argumentList: FirArgumentList
|
||||||
abstract val useSiteTarget: AnnotationUseSiteTarget?
|
abstract val useSiteTarget: AnnotationUseSiteTarget?
|
||||||
abstract val annotationTypeRef: FirTypeRef
|
abstract val annotationTypeRef: FirTypeRef
|
||||||
abstract val resolved: Boolean
|
abstract val resolveStatus: FirAnnotationResolveStatus
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnnotationCall(this, data)
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnnotationCall(this, data)
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ abstract class FirAnnotationCall : FirExpression(), FirCall {
|
|||||||
|
|
||||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||||
|
|
||||||
abstract fun replaceResolved(newResolved: Boolean)
|
abstract fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus)
|
||||||
|
|
||||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnnotationCall
|
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnnotationCall
|
||||||
|
|
||||||
|
|||||||
+3
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
|
|||||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
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.FirArgumentList
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
|
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
|
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
|
||||||
@@ -31,6 +32,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder,
|
|||||||
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
||||||
var useSiteTarget: AnnotationUseSiteTarget? = null
|
var useSiteTarget: AnnotationUseSiteTarget? = null
|
||||||
lateinit var annotationTypeRef: FirTypeRef
|
lateinit var annotationTypeRef: FirTypeRef
|
||||||
|
var resolveStatus: FirAnnotationResolveStatus = FirAnnotationResolveStatus.Unresolved
|
||||||
|
|
||||||
override fun build(): FirAnnotationCall {
|
override fun build(): FirAnnotationCall {
|
||||||
return FirAnnotationCallImpl(
|
return FirAnnotationCallImpl(
|
||||||
@@ -39,6 +41,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder,
|
|||||||
argumentList,
|
argumentList,
|
||||||
useSiteTarget,
|
useSiteTarget,
|
||||||
annotationTypeRef,
|
annotationTypeRef,
|
||||||
|
resolveStatus,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
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.FirArgumentList
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
@@ -23,9 +24,9 @@ internal class FirAnnotationCallImpl(
|
|||||||
override var argumentList: FirArgumentList,
|
override var argumentList: FirArgumentList,
|
||||||
override val useSiteTarget: AnnotationUseSiteTarget?,
|
override val useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
override var annotationTypeRef: FirTypeRef,
|
override var annotationTypeRef: FirTypeRef,
|
||||||
|
override var resolveStatus: FirAnnotationResolveStatus,
|
||||||
) : FirAnnotationCall() {
|
) : FirAnnotationCall() {
|
||||||
override val typeRef: FirTypeRef get() = annotationTypeRef
|
override val typeRef: FirTypeRef get() = annotationTypeRef
|
||||||
override var resolved: Boolean = false
|
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
annotations.forEach { it.accept(visitor, data) }
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
@@ -56,7 +57,7 @@ internal class FirAnnotationCallImpl(
|
|||||||
argumentList = newArgumentList
|
argumentList = newArgumentList
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun replaceResolved(newResolved: Boolean) {
|
override fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) {
|
||||||
resolved = newResolved
|
resolveStatus = newResolveStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -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
|
||||||
|
}
|
||||||
+1
@@ -95,6 +95,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
default("argumentList") {
|
default("argumentList") {
|
||||||
value = "FirEmptyArgumentList"
|
value = "FirEmptyArgumentList"
|
||||||
}
|
}
|
||||||
|
default("resolveStatus", "FirAnnotationResolveStatus.Unresolved")
|
||||||
useTypes(emptyArgumentListType)
|
useTypes(emptyArgumentListType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-2
@@ -70,8 +70,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
value = "annotationTypeRef"
|
value = "annotationTypeRef"
|
||||||
withGetter = true
|
withGetter = true
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultFalse("resolved")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl(arrayOfCall)
|
impl(arrayOfCall)
|
||||||
|
|||||||
+1
-1
@@ -413,7 +413,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
annotationCall.configure {
|
annotationCall.configure {
|
||||||
+field("useSiteTarget", annotationUseSiteTargetType, nullable = true)
|
+field("useSiteTarget", annotationUseSiteTargetType, nullable = true)
|
||||||
+field("annotationTypeRef", typeRef).withTransform()
|
+field("annotationTypeRef", typeRef).withTransform()
|
||||||
+booleanField("resolved", withReplace = true)
|
+field("resolveStatus", annotationResolveStatusType, withReplace = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
arraySetCall.configure {
|
arraySetCall.configure {
|
||||||
|
|||||||
@@ -83,3 +83,4 @@ val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl")
|
|||||||
val firImplementationDetailType = generatedType("FirImplementationDetail")
|
val firImplementationDetailType = generatedType("FirImplementationDetail")
|
||||||
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
|
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
|
||||||
val declarationAttributesType = generatedType("declarations", "FirDeclarationAttributes")
|
val declarationAttributesType = generatedType("declarations", "FirDeclarationAttributes")
|
||||||
|
val annotationResolveStatusType = generatedType("expressions", "FirAnnotationResolveStatus")
|
||||||
Reference in New Issue
Block a user