[FIR] Add FirControlFloGraph owner supertype to FirField
FirField, just like FirProperty, can have control flow graph of it's intializer
This commit is contained in:
committed by
teamcityserver
parent
3bef04cf5e
commit
5778cb440f
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirFieldBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -56,7 +57,7 @@ class FirJavaField @FirImplementationDetail constructor(
|
||||
override val getter: FirPropertyAccessor? get() = null
|
||||
override val setter: FirPropertyAccessor? get() = null
|
||||
override val backingField: FirBackingField? = null
|
||||
|
||||
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
||||
override val origin: FirDeclarationOrigin
|
||||
get() = FirDeclarationOrigin.Java
|
||||
|
||||
@@ -153,6 +154,8 @@ class FirJavaField @FirImplementationDetail constructor(
|
||||
override fun replaceGetter(newGetter: FirPropertyAccessor?) {}
|
||||
|
||||
override fun replaceSetter(newSetter: FirPropertyAccessor?) {}
|
||||
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {}
|
||||
}
|
||||
|
||||
@FirBuilderDsl
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -22,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirField : FirVariable() {
|
||||
abstract class FirField : FirVariable(), FirControlFlowGraphOwner {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val moduleData: FirModuleData
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
@@ -44,6 +45,7 @@ abstract class FirField : FirVariable() {
|
||||
abstract override val setter: FirPropertyAccessor?
|
||||
abstract override val backingField: FirBackingField?
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||
abstract override val symbol: FirFieldSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitField(this, data)
|
||||
@@ -66,6 +68,8 @@ abstract class FirField : FirVariable() {
|
||||
|
||||
abstract override fun replaceSetter(newSetter: FirPropertyAccessor?)
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirField
|
||||
|
||||
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirField
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirDeclarationBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -56,6 +57,7 @@ class FirFieldImpl @FirImplementationDetail constructor(
|
||||
override val isVal: Boolean get() = !isVar
|
||||
override val getter: FirPropertyAccessor? get() = null
|
||||
override val setter: FirPropertyAccessor? get() = null
|
||||
override var controlFlowGraphReference: FirControlFlowGraphReference? = null
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@@ -68,6 +70,7 @@ class FirFieldImpl @FirImplementationDetail constructor(
|
||||
initializer?.accept(visitor, data)
|
||||
backingField?.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
controlFlowGraphReference?.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFieldImpl {
|
||||
@@ -128,6 +131,7 @@ class FirFieldImpl @FirImplementationDetail constructor(
|
||||
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirFieldImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -152,4 +156,8 @@ class FirFieldImpl @FirImplementationDetail constructor(
|
||||
override fun replaceGetter(newGetter: FirPropertyAccessor?) {}
|
||||
|
||||
override fun replaceSetter(newSetter: FirPropertyAccessor?) {}
|
||||
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,8 +160,6 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
|
||||
override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R = visitTypedDeclaration(callableDeclaration, data)
|
||||
|
||||
override fun visitField(field: FirField, data: D): R = visitVariable(field, data)
|
||||
|
||||
override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitVariable(enumEntry, data)
|
||||
|
||||
override fun visitFile(file: FirFile, data: D): R = visitDeclaration(file, data)
|
||||
|
||||
@@ -160,8 +160,6 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) = visitTypedDeclaration(callableDeclaration)
|
||||
|
||||
override fun visitField(field: FirField) = visitVariable(field)
|
||||
|
||||
override fun visitEnumEntry(enumEntry: FirEnumEntry) = visitVariable(enumEntry)
|
||||
|
||||
override fun visitFile(file: FirFile) = visitDeclaration(file)
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val variable by sealedElement(Declaration, callableDeclaration, statement)
|
||||
val valueParameter by element(Declaration, variable, controlFlowGraphOwner)
|
||||
val property by element(Declaration, variable, typeParametersOwner, controlFlowGraphOwner)
|
||||
val field by element(Declaration, variable)
|
||||
val field by element(Declaration, variable, controlFlowGraphOwner)
|
||||
val enumEntry by element(Declaration, variable)
|
||||
|
||||
val classLikeDeclaration by sealedElement(Declaration, memberDeclaration, statement)
|
||||
|
||||
Reference in New Issue
Block a user