[FIR] Make FirAnnotationCall resolvable

This commit is contained in:
Dmitriy Novozhilov
2020-07-21 13:23:27 +03:00
committed by Mikhail Glukhikh
parent ffd30566be
commit 614291b2cc
4 changed files with 24 additions and 2 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions
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.references.FirReference
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.*
@@ -15,11 +16,12 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY * DO NOT MODIFY IT MANUALLY
*/ */
abstract class FirAnnotationCall : FirExpression(), FirCall { abstract class FirAnnotationCall : FirExpression(), FirCall, FirResolvable {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val argumentList: FirArgumentList abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirReference
abstract val useSiteTarget: AnnotationUseSiteTarget? abstract val useSiteTarget: AnnotationUseSiteTarget?
abstract val annotationTypeRef: FirTypeRef abstract val annotationTypeRef: FirTypeRef
abstract val resolveStatus: FirAnnotationResolveStatus abstract val resolveStatus: FirAnnotationResolveStatus
@@ -30,9 +32,13 @@ abstract class FirAnnotationCall : FirExpression(), FirCall {
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
abstract fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) 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
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirAnnotationCall
abstract fun <D> transformAnnotationTypeRef(transformer: FirTransformer<D>, data: D): FirAnnotationCall abstract fun <D> transformAnnotationTypeRef(transformer: FirTransformer<D>, data: D): FirAnnotationCall
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotationCallImpl import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotationCallImpl
import org.jetbrains.kotlin.fir.references.FirReference
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.*
@@ -30,6 +31,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder,
override var source: FirSourceElement? = null override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList override var argumentList: FirArgumentList = FirEmptyArgumentList
lateinit var calleeReference: FirReference
var useSiteTarget: AnnotationUseSiteTarget? = null var useSiteTarget: AnnotationUseSiteTarget? = null
lateinit var annotationTypeRef: FirTypeRef lateinit var annotationTypeRef: FirTypeRef
var resolveStatus: FirAnnotationResolveStatus = FirAnnotationResolveStatus.Unresolved var resolveStatus: FirAnnotationResolveStatus = FirAnnotationResolveStatus.Unresolved
@@ -39,6 +41,7 @@ class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder,
source, source,
annotations, annotations,
argumentList, argumentList,
calleeReference,
useSiteTarget, useSiteTarget,
annotationTypeRef, annotationTypeRef,
resolveStatus, resolveStatus,
@@ -10,6 +10,7 @@ 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.FirAnnotationResolveStatus
import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.references.FirReference
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.*
@@ -22,6 +23,7 @@ internal class FirAnnotationCallImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
override var calleeReference: FirReference,
override val useSiteTarget: AnnotationUseSiteTarget?, override val useSiteTarget: AnnotationUseSiteTarget?,
override var annotationTypeRef: FirTypeRef, override var annotationTypeRef: FirTypeRef,
override var resolveStatus: FirAnnotationResolveStatus, override var resolveStatus: FirAnnotationResolveStatus,
@@ -31,12 +33,14 @@ internal class FirAnnotationCallImpl(
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) }
argumentList.accept(visitor, data) argumentList.accept(visitor, data)
calleeReference.accept(visitor, data)
annotationTypeRef.accept(visitor, data) annotationTypeRef.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnnotationCallImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnnotationCallImpl {
transformAnnotations(transformer, data) transformAnnotations(transformer, data)
argumentList = argumentList.transformSingle(transformer, data) argumentList = argumentList.transformSingle(transformer, data)
transformCalleeReference(transformer, data)
transformAnnotationTypeRef(transformer, data) transformAnnotationTypeRef(transformer, data)
return this return this
} }
@@ -46,6 +50,11 @@ internal class FirAnnotationCallImpl(
return this return this
} }
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirAnnotationCallImpl {
calleeReference = calleeReference.transformSingle(transformer, data)
return this
}
override fun <D> transformAnnotationTypeRef(transformer: FirTransformer<D>, data: D): FirAnnotationCallImpl { override fun <D> transformAnnotationTypeRef(transformer: FirTransformer<D>, data: D): FirAnnotationCallImpl {
annotationTypeRef = annotationTypeRef.transformSingle(transformer, data) annotationTypeRef = annotationTypeRef.transformSingle(transformer, data)
return this return this
@@ -57,6 +66,10 @@ internal class FirAnnotationCallImpl(
argumentList = newArgumentList argumentList = newArgumentList
} }
override fun replaceCalleeReference(newCalleeReference: FirReference) {
calleeReference = newCalleeReference
}
override fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) { override fun replaceResolveStatus(newResolveStatus: FirAnnotationResolveStatus) {
resolveStatus = newResolveStatus resolveStatus = newResolveStatus
} }
@@ -83,7 +83,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val typeProjectionWithVariance = element("TypeProjectionWithVariance", TypeRef, typeProjection) val typeProjectionWithVariance = element("TypeProjectionWithVariance", TypeRef, typeProjection)
val argumentList = element("ArgumentList", Expression) val argumentList = element("ArgumentList", Expression)
val call = element("Call", Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`? val call = element("Call", Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`?
val annotationCall = element("AnnotationCall", Expression, expression, call) val annotationCall = element("AnnotationCall", Expression, expression, call, resolvable)
val comparisonExpression = element("ComparisonExpression", Expression, expression) val comparisonExpression = element("ComparisonExpression", Expression, expression)
val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call) val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call)
val assignmentOperatorStatement = element("AssignmentOperatorStatement", Expression, statement) val assignmentOperatorStatement = element("AssignmentOperatorStatement", Expression, statement)