[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,7 @@
fun test() {
var x = intArrayOf(0)
<expr>x[0] += 1</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = x[0] += 1
type = kotlin.Unit
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
var x = intArrayOf(0)
<expr>x[0]++</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = x[0]++
type = kotlin.Unit
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
var x = intArrayOf(0)
<expr>++x[0]</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = ++x[0]
type = kotlin.Unit
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
var x = 0
<expr>x += 1</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = x += 1
isAugmented = true
variable = var x: kotlin.Int
]
@@ -0,0 +1,7 @@
class Foo {
var x: Int = 0
fun test() {
<expr>x = 1</expr>
}
}
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,9 @@
fun test() {
var x = 0
if (x > 0) {
<expr>x = 1</expr>
}
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = x = 1
isAugmented = false
variable = var x: kotlin.Int
]
@@ -0,0 +1,9 @@
// WITH_STDLIB
fun test() {
var (x, y) = Pair(1, 2)
<expr>x = 1</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = x = 1
isAugmented = false
variable = var x: kotlin.Int
]
@@ -0,0 +1,3 @@
fun test() {
<expr>x = "foo"</expr>
}
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
var x = 0
<expr>x++</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = x++
isAugmented = true
variable = var x: kotlin.Int
]
@@ -0,0 +1,7 @@
fun test() {
var x = 0
<expr>++x</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = ++x
isAugmented = true
variable = var x: kotlin.Int
]
@@ -0,0 +1,7 @@
fun test() {
block { n ->
<expr>n = 1</expr>
}
}
fun block(block: (Int) -> Unit) {}
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
<expr>val x = 0
consume(1)</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,12 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = DefaultExpressionInfo:
expression = consume(1)
type = kotlin.Unit
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,3 @@
fun test(n: Int) {
<expr>n = 5</expr>
}
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []
@@ -0,0 +1,7 @@
fun test() {
var x = 0
<expr>x = 1</expr>
consume(x)
}
fun consume(n: Int) {}
@@ -0,0 +1,15 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = [
VariableReassignment:
expression = x = 1
isAugmented = false
variable = var x: kotlin.Int
]
@@ -0,0 +1,5 @@
var x: Int = 0
fun test() {
<expr>x = 1</expr>
}
@@ -0,0 +1,10 @@
KtDataFlowExitPointSnapshot:
defaultExpressionInfo = null
hasEscapingJumps = false
hasJumps = false
hasMultipleJumpKinds = false
hasMultipleJumpTargets = false
loopJumpExpressions = []
returnValueType = null
valuedReturnExpressions = []
variableReassignments = []