[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> {
|
||||
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()
|
||||
}
|
||||
|
||||
@@ -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 <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 fun replaceResolved(newResolved: Boolean)
|
||||
abstract fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus)
|
||||
|
||||
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.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,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -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 <R, D> acceptChildren(visitor: FirVisitor<R, D>, 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
|
||||
}
|
||||
}
|
||||
|
||||
+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") {
|
||||
value = "FirEmptyArgumentList"
|
||||
}
|
||||
default("resolveStatus", "FirAnnotationResolveStatus.Unresolved")
|
||||
useTypes(emptyArgumentListType)
|
||||
}
|
||||
|
||||
|
||||
-2
@@ -70,8 +70,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
value = "annotationTypeRef"
|
||||
withGetter = true
|
||||
}
|
||||
|
||||
defaultFalse("resolved")
|
||||
}
|
||||
|
||||
impl(arrayOfCall)
|
||||
|
||||
+1
-1
@@ -413,7 +413,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
annotationCall.configure {
|
||||
+field("useSiteTarget", annotationUseSiteTargetType, nullable = true)
|
||||
+field("annotationTypeRef", typeRef).withTransform()
|
||||
+booleanField("resolved", withReplace = true)
|
||||
+field("resolveStatus", annotationResolveStatusType, withReplace = true)
|
||||
}
|
||||
|
||||
arraySetCall.configure {
|
||||
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user