[FIR] Fix collection subgraphs to drop from delegate calls
This commit is contained in:
+13
-3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.*
|
import org.jetbrains.kotlin.fir.resolve.dfa.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||||
@@ -927,15 +928,24 @@ class ControlFlowGraphBuilder {
|
|||||||
|
|
||||||
fun dropSubgraphFromCall(call: FirFunctionCall) {
|
fun dropSubgraphFromCall(call: FirFunctionCall) {
|
||||||
val graphs = mutableListOf<ControlFlowGraph>()
|
val graphs = mutableListOf<ControlFlowGraph>()
|
||||||
|
|
||||||
call.acceptChildren(object : FirDefaultVisitorVoid() {
|
call.acceptChildren(object : FirDefaultVisitorVoid() {
|
||||||
override fun visitElement(element: FirElement) {
|
override fun visitElement(element: FirElement) {
|
||||||
element.acceptChildren(this)
|
element.acceptChildren(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
|
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
|
||||||
anonymousFunction.controlFlowGraphReference.controlFlowGraph?.let {
|
anonymousFunction.controlFlowGraphReference.accept(this)
|
||||||
graphs += it
|
}
|
||||||
}
|
|
||||||
|
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) {
|
||||||
|
anonymousObject.controlFlowGraphReference.accept(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference) {
|
||||||
|
val graph = controlFlowGraphReference.controlFlowGraph ?: return
|
||||||
|
if (graph.owner == null) return
|
||||||
|
graphs += graph
|
||||||
}
|
}
|
||||||
}, null)
|
}, null)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user