[kotlin] Provide CFG facade for the extract function refactoring

This is the first implementation of a control flow graph facade for the
extract function IDE refactoring. The exact contents of
'KtDataFlowExitPointSnapshot' will be refined later.

^KT-65762 Fixed
This commit is contained in:
Yan Zhulanow
2024-03-05 01:44:32 +09:00
committed by Space Team
parent b032e647f7
commit 0fec50135f
165 changed files with 4351 additions and 1 deletions
@@ -0,0 +1,4 @@
annotation class Anno(val value: IntArray)
@Anno(value = <expr>[1, 2, 3]</expr>)
class Foo
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = [1, 2, 3]
type = kotlin.IntArray
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,3 @@
fun foo(): Int {
<expr>return@foo 1</expr>
}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = true
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = kotlin.Int
valuedReturnExpressions = [
return@foo 1
]
variableReassignments = []
@@ -0,0 +1,3 @@
fun foo(): Int {
1.let { <expr>return it + 1</expr> }
}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = true
hasJumps = true
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = kotlin.Int
valuedReturnExpressions = [
return it + 1
]
variableReassignments = []
@@ -0,0 +1,3 @@
fun foo(): Int {
1.let { <expr>return@foo it + 1</expr> }
}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = true
hasJumps = true
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = kotlin.Int
valuedReturnExpressions = [
return@foo it + 1
]
variableReassignments = []
@@ -0,0 +1,3 @@
fun test(<expr>a: Int = compute()</expr>) {}
fun compute(): Int = 0
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,3 @@
fun test(a: Int = <expr>compute()</expr>) {}
fun compute(): Int = 0
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = compute()
type = kotlin.Int
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,4 @@
fun foo(a: Int): Int {
val b: Int = 1
<expr>return a + b</expr>
}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = true
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = kotlin.Int
valuedReturnExpressions = [
return a + b
]
variableReassignments = []
@@ -0,0 +1,6 @@
fun test() {
<expr>call(1);</expr>
call(2)
}
fun call(n: Int): Int = n
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = call(1)
type = kotlin.Int
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []