Analyze Data Flow: Support dereference processing
#KT-11994 In Progress
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
// FLOW: OUT
|
||||
// WITH_DEREFERENCES
|
||||
|
||||
class A
|
||||
|
||||
operator fun A.get(i: Int) = this
|
||||
operator fun A.set(i: Int, a: A) = this
|
||||
operator fun A.plusAssign(a: A) = this
|
||||
operator fun A.times(a: A) = this
|
||||
operator fun A.inc() = this
|
||||
|
||||
fun test() {
|
||||
val <caret>x = A()
|
||||
val y = A()
|
||||
|
||||
x[1]
|
||||
x[1] = y
|
||||
x[1] += y
|
||||
x[1] *= y
|
||||
x[1]++
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
13 val <bold>x = A()</bold>
|
||||
@@ -0,0 +1,21 @@
|
||||
// FLOW: OUT
|
||||
// WITH_DEREFERENCES
|
||||
|
||||
class A {
|
||||
operator fun get(i: Int) = this
|
||||
operator fun set(i: Int, a: A) = this
|
||||
operator fun plusAssign(a: A) = this
|
||||
operator fun times(a: A) = this
|
||||
operator fun inc() = this
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val <caret>x = A()
|
||||
val y = A()
|
||||
|
||||
x[1]
|
||||
x[1] = y
|
||||
x[1] += y
|
||||
x[1] *= y
|
||||
x[1]++
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
13 val <bold>x = A()</bold>
|
||||
16 DEREFERENCE: <bold>x</bold>[1]
|
||||
17 DEREFERENCE: <bold>x</bold>[1] = y
|
||||
18 DEREFERENCE: <bold>x</bold>[1] += y
|
||||
19 DEREFERENCE: <bold>x</bold>[1] *= y
|
||||
20 DEREFERENCE: <bold>x</bold>[1]++
|
||||
@@ -0,0 +1,30 @@
|
||||
// FLOW: OUT
|
||||
// WITH_DEREFERENCES
|
||||
|
||||
class A {
|
||||
operator fun plus(n: Int) = this
|
||||
operator fun unaryPlus() = this
|
||||
operator fun inc() = this
|
||||
operator fun timesAssign(n: Int) = this
|
||||
}
|
||||
|
||||
operator fun A.minus(n: Int) = this
|
||||
operator fun A.unaryMinus() = this
|
||||
operator fun A.dec() = this
|
||||
operator fun A.divAssign(n: Int) = this
|
||||
|
||||
fun test() {
|
||||
var <caret>x = A()
|
||||
|
||||
+x
|
||||
x + 1
|
||||
x++
|
||||
x += 1
|
||||
x *= 1
|
||||
|
||||
-x
|
||||
x - 1
|
||||
x--
|
||||
x -= 1
|
||||
x /= 1
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
17 var <bold>x = A()</bold>
|
||||
19 DEREFERENCE: +<bold>x</bold>
|
||||
20 DEREFERENCE: <bold>x</bold> + 1
|
||||
21 DEREFERENCE: <bold>x</bold>++
|
||||
22 DEREFERENCE: <bold>x</bold> += 1
|
||||
23 DEREFERENCE: <bold>x</bold> *= 1
|
||||
@@ -0,0 +1,26 @@
|
||||
// FLOW: OUT
|
||||
// WITH_DEREFERENCES
|
||||
|
||||
class A {
|
||||
fun foo() = 1
|
||||
val bar = 2
|
||||
}
|
||||
|
||||
fun A.fooExt() = 1
|
||||
val A.barExt: Int get() = 2
|
||||
|
||||
fun test() {
|
||||
val <caret>x = A()
|
||||
|
||||
x.foo()
|
||||
x.bar
|
||||
x.fooExt()
|
||||
x.barExt
|
||||
|
||||
val y: A? = x
|
||||
|
||||
y?.foo()
|
||||
y?.bar
|
||||
y?.fooExt()
|
||||
y?.barExt
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
13 val <bold>x = A()</bold>
|
||||
15 DEREFERENCE: <bold>x</bold>.foo()
|
||||
16 DEREFERENCE: <bold>x</bold>.bar
|
||||
20 val <bold>y: A? = x</bold>
|
||||
22 DEREFERENCE: <bold>y</bold>?.foo()
|
||||
23 DEREFERENCE: <bold>y</bold>?.bar
|
||||
Reference in New Issue
Block a user