[FIR] Add references to control flow graph to FirFunction and FirProperty
Also add updating CFG references anfter data flow analyzer builds graph That graph is needed for further control flow analysis
This commit is contained in:
@@ -16,6 +16,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME
|
import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -54,8 +56,14 @@ class FirJavaConstructor(
|
|||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|
||||||
|
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirTryExpressionImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirTryExpressionImpl
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenExpressionImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenExpressionImpl
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
@@ -54,7 +55,8 @@ fun FirAnonymousFunction.copy(
|
|||||||
body: FirBlock? = this.body,
|
body: FirBlock? = this.body,
|
||||||
annotations: List<FirAnnotationCall> = this.annotations,
|
annotations: List<FirAnnotationCall> = this.annotations,
|
||||||
typeRef: FirTypeRef = this.typeRef,
|
typeRef: FirTypeRef = this.typeRef,
|
||||||
label: FirLabel? = this.label
|
label: FirLabel? = this.label,
|
||||||
|
controlFlowGraphReference: FirControlFlowGraphReference = this.controlFlowGraphReference
|
||||||
): FirAnonymousFunction {
|
): FirAnonymousFunction {
|
||||||
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef, symbol).apply {
|
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef, symbol).apply {
|
||||||
this.valueParameters.addAll(valueParameters)
|
this.valueParameters.addAll(valueParameters)
|
||||||
@@ -62,6 +64,7 @@ fun FirAnonymousFunction.copy(
|
|||||||
this.annotations.addAll(annotations)
|
this.annotations.addAll(annotations)
|
||||||
this.typeRef = typeRef
|
this.typeRef = typeRef
|
||||||
this.label = label
|
this.label = label
|
||||||
|
this.controlFlowGraphReference = controlFlowGraphReference
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.resolve.dfa
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||||
|
|
||||||
|
class FirControlFlowGraphReferenceImpl(val controlFlowGraph: ControlFlowGraph) : FirControlFlowGraphReference()
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.resolve.transformers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
|
||||||
|
object ControlFlowGraphReferenceTransformer : FirTransformer<ControlFlowGraph>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: ControlFlowGraph): CompositeTransformResult<E> {
|
||||||
|
return element.compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <F : FirFunction<F>> transformFunction(
|
||||||
|
function: FirFunction<F>,
|
||||||
|
data: ControlFlowGraph
|
||||||
|
): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return (function.transformChildren(this, data) as FirFunction<*>).compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformControlFlowGraphReference(
|
||||||
|
controlFlowGraphReference: FirControlFlowGraphReference,
|
||||||
|
data: ControlFlowGraph
|
||||||
|
): CompositeTransformResult<FirControlFlowGraphReference> {
|
||||||
|
return if (controlFlowGraphReference is FirEmptyControlFlowGraphReference) {
|
||||||
|
FirControlFlowGraphReferenceImpl(data).compose()
|
||||||
|
} else {
|
||||||
|
controlFlowGraphReference.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-4
@@ -599,9 +599,9 @@ open class FirBodyResolveTransformer(
|
|||||||
localScopes += FirLocalScope()
|
localScopes += FirLocalScope()
|
||||||
dataFlowAnalyzer.enterFunction(function)
|
dataFlowAnalyzer.enterFunction(function)
|
||||||
super.transformFunction(function, data).also {
|
super.transformFunction(function, data).also {
|
||||||
val result = it.single
|
val result = it.single as FirFunction<*>
|
||||||
// TODO: handle graph
|
val controlFlowGraph = dataFlowAnalyzer.exitFunction(result)
|
||||||
val controlFlowGraph = dataFlowAnalyzer.exitFunction(result as FirFunction<*>)
|
result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -765,8 +765,8 @@ open class FirBodyResolveTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
property.resolvePhase = transformerPhase
|
property.resolvePhase = transformerPhase
|
||||||
// TODO: handle graph
|
|
||||||
val controlFlowGraph = dataFlowAnalyzer.exitProperty(property)
|
val controlFlowGraph = dataFlowAnalyzer.exitProperty(property)
|
||||||
|
property.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph)
|
||||||
property.compose()
|
property.compose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,10 @@ import org.jetbrains.kotlin.fir.FirLabeledElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
abstract class FirAnonymousFunction(
|
abstract class FirAnonymousFunction(
|
||||||
@@ -22,6 +24,8 @@ abstract class FirAnonymousFunction(
|
|||||||
|
|
||||||
abstract override val symbol: FirAnonymousFunctionSymbol
|
abstract override val symbol: FirAnonymousFunctionSymbol
|
||||||
|
|
||||||
|
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitAnonymousFunction(this, data)
|
visitor.visitAnonymousFunction(this, data)
|
||||||
|
|
||||||
@@ -33,4 +37,6 @@ abstract class FirAnonymousFunction(
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef)
|
abstract fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef)
|
||||||
|
|
||||||
|
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousFunction
|
||||||
}
|
}
|
||||||
@@ -31,5 +31,6 @@ interface FirConstructor : @VisitedSupertype FirMemberFunction<FirConstructor> {
|
|||||||
}
|
}
|
||||||
returnTypeRef.accept(visitor, data)
|
returnTypeRef.accept(visitor, data)
|
||||||
body?.accept(visitor, data)
|
body?.accept(visitor, data)
|
||||||
|
controlFlowGraphReference?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirTargetElement
|
|||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -19,6 +20,7 @@ interface FirFunction<F : FirFunction<F>> : @VisitedSupertype FirDeclarationWith
|
|||||||
FirTargetElement, FirStatement, FirSymbolOwner<F> {
|
FirTargetElement, FirStatement, FirSymbolOwner<F> {
|
||||||
|
|
||||||
val valueParameters: List<FirValueParameter>
|
val valueParameters: List<FirValueParameter>
|
||||||
|
val controlFlowGraphReference: FirControlFlowGraphReference?
|
||||||
|
|
||||||
override val symbol: FirFunctionSymbol<F>
|
override val symbol: FirFunctionSymbol<F>
|
||||||
|
|
||||||
@@ -30,8 +32,11 @@ interface FirFunction<F : FirFunction<F>> : @VisitedSupertype FirDeclarationWith
|
|||||||
for (parameter in valueParameters) {
|
for (parameter in valueParameters) {
|
||||||
parameter.accept(visitor, data)
|
parameter.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
controlFlowGraphReference?.accept(visitor, data)
|
||||||
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
|
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction<F>
|
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction<F>
|
||||||
|
|
||||||
|
fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirFunction<F>
|
||||||
}
|
}
|
||||||
@@ -24,5 +24,6 @@ interface FirMemberFunction<F : FirMemberFunction<F>> :
|
|||||||
parameter.accept(visitor, data)
|
parameter.accept(visitor, data)
|
||||||
}
|
}
|
||||||
body?.accept(visitor, data)
|
body?.accept(visitor, data)
|
||||||
|
controlFlowGraphReference?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
@@ -30,6 +31,8 @@ interface FirProperty :
|
|||||||
// TODO: it should be probably nullable
|
// TODO: it should be probably nullable
|
||||||
val backingFieldSymbol: FirBackingFieldSymbol
|
val backingFieldSymbol: FirBackingFieldSymbol
|
||||||
|
|
||||||
|
val controlFlowGraphReference: FirControlFlowGraphReference
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitProperty(this, data)
|
visitor.visitProperty(this, data)
|
||||||
|
|
||||||
@@ -39,5 +42,8 @@ interface FirProperty :
|
|||||||
delegate?.accept(visitor, data)
|
delegate?.accept(visitor, data)
|
||||||
getter?.accept(visitor, data)
|
getter?.accept(visitor, data)
|
||||||
setter?.accept(visitor, data)
|
setter?.accept(visitor, data)
|
||||||
|
controlFlowGraphReference.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirProperty
|
||||||
}
|
}
|
||||||
+10
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -34,12 +36,15 @@ class FirAnonymousFunctionImpl(
|
|||||||
|
|
||||||
override var resolvePhase = FirResolvePhase.DECLARATIONS
|
override var resolvePhase = FirResolvePhase.DECLARATIONS
|
||||||
|
|
||||||
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
||||||
label = label?.transformSingle(transformer, data)
|
label = label?.transformSingle(transformer, data)
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
body = body?.transformSingle(transformer, data)
|
body = body?.transformSingle(transformer, data)
|
||||||
|
transformControlFlowGraphReference(transformer, data)
|
||||||
|
|
||||||
return super<FirAnonymousFunction>.transformChildren(transformer, data)
|
return super<FirAnonymousFunction>.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
@@ -56,4 +61,9 @@ class FirAnonymousFunctionImpl(
|
|||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousFunction {
|
||||||
|
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+11
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
@@ -61,6 +63,8 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
|
|
||||||
override var body: FirBlock? = null
|
override var body: FirBlock? = null
|
||||||
|
|
||||||
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
annotations.transformInplace(transformer, data)
|
annotations.transformInplace(transformer, data)
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
@@ -68,6 +72,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
status = status.transformSingle(transformer, data)
|
status = status.transformSingle(transformer, data)
|
||||||
delegatedConstructor?.transformSingle(transformer, data)
|
delegatedConstructor?.transformSingle(transformer, data)
|
||||||
body = body?.transformSingle(transformer, data)
|
body = body?.transformSingle(transformer, data)
|
||||||
|
transformControlFlowGraphReference(transformer, data)
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
@@ -79,6 +84,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
status.accept(visitor, data)
|
status.accept(visitor, data)
|
||||||
delegatedConstructor?.accept(visitor, data)
|
delegatedConstructor?.accept(visitor, data)
|
||||||
body?.accept(visitor, data)
|
body?.accept(visitor, data)
|
||||||
|
controlFlowGraphReference.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirConstructorImpl {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirConstructorImpl {
|
||||||
@@ -86,6 +92,11 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirConstructorImpl {
|
||||||
|
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val NAME = Name.special("<init>")
|
val NAME = Name.special("<init>")
|
||||||
}
|
}
|
||||||
|
|||||||
+11
@@ -10,9 +10,13 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
@@ -21,6 +25,7 @@ import org.jetbrains.kotlin.fir.transformSingle
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -39,6 +44,8 @@ abstract class FirDefaultPropertyAccessor(
|
|||||||
|
|
||||||
abstract override var returnTypeRef: FirTypeRef
|
abstract override var returnTypeRef: FirTypeRef
|
||||||
|
|
||||||
|
final override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
||||||
|
|
||||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
|
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
}
|
}
|
||||||
@@ -46,6 +53,10 @@ abstract class FirDefaultPropertyAccessor(
|
|||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirDefaultPropertyAccessor {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirDefaultPropertyAccessor {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirFunction<FirPropertyAccessor> {
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FirDefaultPropertyGetter(
|
class FirDefaultPropertyGetter(
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -44,6 +46,8 @@ class FirErrorFunction(
|
|||||||
override val body: FirBlock?
|
override val body: FirBlock?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
|
||||||
|
|
||||||
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
@@ -54,4 +58,8 @@ class FirErrorFunction(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {}
|
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirErrorFunction {
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
@@ -74,9 +76,12 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
|
|||||||
|
|
||||||
override var body: FirBlock? = null
|
override var body: FirBlock? = null
|
||||||
|
|
||||||
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
body = body?.transformSingle(transformer, data)
|
body = body?.transformSingle(transformer, data)
|
||||||
|
transformControlFlowGraphReference(transformer, data)
|
||||||
|
|
||||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
@@ -85,4 +90,9 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
|
|||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirMemberFunctionImpl {
|
||||||
|
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
@@ -52,6 +54,8 @@ class FirMemberPropertyImpl(
|
|||||||
|
|
||||||
override var setter: FirPropertyAccessor? = null
|
override var setter: FirPropertyAccessor? = null
|
||||||
|
|
||||||
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
backingFieldSymbol.bind(this)
|
backingFieldSymbol.bind(this)
|
||||||
@@ -68,6 +72,7 @@ class FirMemberPropertyImpl(
|
|||||||
typeParameters.transformInplace(transformer, data)
|
typeParameters.transformInplace(transformer, data)
|
||||||
status = status.transformSingle(transformer, data)
|
status = status.transformSingle(transformer, data)
|
||||||
annotations.transformInplace(transformer, data)
|
annotations.transformInplace(transformer, data)
|
||||||
|
transformControlFlowGraphReference(transformer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
@@ -77,4 +82,9 @@ class FirMemberPropertyImpl(
|
|||||||
// Everything other (annotations, etc.) is done above
|
// Everything other (annotations, etc.) is done above
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirMemberPropertyImpl {
|
||||||
|
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
@@ -32,11 +34,14 @@ class FirPropertyAccessorImpl(
|
|||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|
||||||
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
body = body?.transformSingle(transformer, data)
|
body = body?.transformSingle(transformer, data)
|
||||||
status = status.transformSingle(transformer, data)
|
status = status.transformSingle(transformer, data)
|
||||||
|
transformControlFlowGraphReference(transformer, data)
|
||||||
|
|
||||||
return super.transformChildren(transformer, data)
|
return super.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
@@ -48,4 +53,9 @@ class FirPropertyAccessorImpl(
|
|||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
|
||||||
|
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.references
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||||
|
import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirReference
|
||||||
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
@BaseTransformedType
|
||||||
|
abstract class FirControlFlowGraphReference : FirPureAbstractElement(), @VisitedSupertype FirReference {
|
||||||
|
override val psi: PsiElement? get() = null
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||||
|
return visitor.visitControlFlowGraphReference(this, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.references
|
||||||
|
|
||||||
|
class FirEmptyControlFlowGraphReference : FirControlFlowGraphReference()
|
||||||
+11
-1
@@ -6,9 +6,11 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
|
|
||||||
@@ -152,6 +154,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(reference, data)
|
return transformElement(reference, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult<FirControlFlowGraphReference> {
|
||||||
|
return transformReference(controlFlowGraphReference, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult<FirNamedReference> {
|
open fun transformNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult<FirNamedReference> {
|
||||||
return transformReference(namedReference, data)
|
return transformReference(namedReference, data)
|
||||||
}
|
}
|
||||||
@@ -564,6 +570,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformContinueExpression(continueExpression, data)
|
return transformContinueExpression(continueExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformControlFlowGraphReference(controlFlowGraphReference, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformDeclaration(declaration, data)
|
return transformDeclaration(declaration, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
|
|
||||||
@@ -152,6 +154,10 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitElement(reference, data)
|
return visitElement(reference, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): R {
|
||||||
|
return visitReference(controlFlowGraphReference, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitNamedReference(namedReference: FirNamedReference, data: D): R {
|
open fun visitNamedReference(namedReference: FirNamedReference, data: D): R {
|
||||||
return visitReference(namedReference, data)
|
return visitReference(namedReference, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -6,9 +6,11 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
|
|
||||||
@@ -152,6 +154,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(reference, null)
|
visitElement(reference, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference) {
|
||||||
|
visitReference(controlFlowGraphReference, null)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitNamedReference(namedReference: FirNamedReference) {
|
open fun visitNamedReference(namedReference: FirNamedReference) {
|
||||||
visitReference(namedReference, null)
|
visitReference(namedReference, null)
|
||||||
}
|
}
|
||||||
@@ -564,6 +570,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitContinueExpression(continueExpression)
|
visitContinueExpression(continueExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: Nothing?) {
|
||||||
|
visitControlFlowGraphReference(controlFlowGraphReference)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) {
|
final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) {
|
||||||
visitDeclaration(declaration)
|
visitDeclaration(declaration)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user