FIR: support annotation resolve & rendering
This commit is contained in:
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||
@@ -353,14 +354,32 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
}
|
||||
|
||||
override fun visitCall(call: FirCall) {
|
||||
visitExpression(call)
|
||||
print("(")
|
||||
call.arguments.renderSeparated()
|
||||
print(")")
|
||||
}
|
||||
|
||||
override fun visitAnnotationCall(annotationCall: FirAnnotationCall) {
|
||||
print("@")
|
||||
annotationCall.useSiteTarget?.let {
|
||||
print(it.name)
|
||||
print(":")
|
||||
}
|
||||
annotationCall.annotationType.accept(this)
|
||||
visitCall(annotationCall)
|
||||
if (annotationCall.useSiteTarget == AnnotationUseSiteTarget.FILE) {
|
||||
println()
|
||||
} else {
|
||||
print(" ")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
if (delegatedConstructorCall.isSuper) {
|
||||
print(": super")
|
||||
} else if (delegatedConstructorCall.isThis) {
|
||||
print(": this")
|
||||
}
|
||||
visitCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -30,6 +31,7 @@ abstract class FirAbstractCallableMember(
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirCallableMember {
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
receiverType = receiverType?.transformSingle(transformer, data)
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ abstract class FirAbstractFunction(
|
||||
final override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
|
||||
@@ -46,6 +46,7 @@ open class FirClassImpl(
|
||||
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClass {
|
||||
annotations.transformInplace(transformer, data)
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
superTypes.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
|
||||
@@ -26,6 +26,7 @@ class FirFileImpl(
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
imports.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
return this
|
||||
|
||||
@@ -37,6 +37,7 @@ class FirTypeAliasImpl(
|
||||
get() = super.modality ?: Modality.FINAL
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
expandedType = expandedType.transformSingle(transformer, data)
|
||||
|
||||
|
||||
@@ -6,13 +6,22 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractCall(
|
||||
final override val session: FirSession,
|
||||
final override val psi: PsiElement?
|
||||
) : FirCall {
|
||||
final override val arguments = mutableListOf<FirExpression>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
arguments.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
+11
-2
@@ -7,13 +7,22 @@ package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirAnnotationCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val useSiteTarget: AnnotationUseSiteTarget?,
|
||||
override val annotationType: FirType
|
||||
) : FirAbstractCall(session, psi), FirAnnotationCall
|
||||
override var annotationType: FirType
|
||||
) : FirAbstractCall(session, psi), FirAnnotationCall {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotationType = annotationType.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractCall>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,12 @@
|
||||
package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeWithNullability
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractAnnotatedType(
|
||||
final override val session: FirSession,
|
||||
@@ -16,4 +19,10 @@ abstract class FirAbstractAnnotatedType(
|
||||
final override val isNullable: Boolean
|
||||
) : FirTypeWithNullability {
|
||||
override val annotations = mutableListOf<FirAnnotationCall>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
annotations.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,6 @@ class FirFunctionTypeImpl(
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
return super<FirAbstractAnnotatedType>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,6 @@ class FirUserTypeImpl(
|
||||
(part.typeArguments as MutableList<FirTypeProjection>).transformInplace(transformer, data)
|
||||
}
|
||||
|
||||
return this
|
||||
return super<FirAbstractAnnotatedType>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user