FIR: support annotation resolve & rendering

This commit is contained in:
Mikhail Glukhikh
2018-03-26 18:41:55 +03:00
parent c31513837b
commit 7279d696d2
15 changed files with 125 additions and 5 deletions
@@ -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)
}
@@ -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)
@@ -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
}
}
@@ -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)
}
}