Analyze Data Flow: Respect member hierarchies

#KT-11994 In Progress
This commit is contained in:
Alexey Sedunov
2017-05-31 21:35:55 +03:00
parent 49da81f681
commit ff5a52b445
32 changed files with 546 additions and 46 deletions
@@ -0,0 +1,24 @@
// FLOW: IN
interface A {
fun foo() = 1
}
open class B : A {
override fun foo() = 2
}
interface C : A {
override fun foo() = 3
}
class D : B(), C {
override fun foo() = 4
}
fun test(a: A, b: B, c: C, d: D) {
val x = a.foo()
val <caret>y = b.foo()
val z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,6 @@
21 val <bold>y = b.foo()</bold>
21 val y = <bold>b.foo()</bold>
8 override fun <bold>foo() = 2</bold>
8 override fun foo() = <bold>2</bold>
16 override fun <bold>foo() = 4</bold>
16 override fun foo() = <bold>4</bold>
@@ -0,0 +1,24 @@
// FLOW: IN
interface A {
fun foo() = 1
}
open class B : A {
override fun foo() = 2
}
interface C : A {
override fun foo() = 3
}
class D : B(), C {
override fun foo() = 4
}
fun test(a: A, b: B, c: C, d: D) {
val x = a.foo()
val y = b.foo()
val <caret>z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,6 @@
22 val <bold>z = c.foo()</bold>
22 val z = <bold>c.foo()</bold>
12 override fun <bold>foo() = 3</bold>
12 override fun foo() = <bold>3</bold>
16 override fun <bold>foo() = 4</bold>
16 override fun foo() = <bold>4</bold>
@@ -0,0 +1,24 @@
// FLOW: IN
interface A {
fun foo() = 1
}
open class B : A {
override fun foo() = 2
}
interface C : A {
override fun foo() = 3
}
class D : B(), C {
override fun foo() = 4
}
fun test(a: A, b: B, c: C, d: D) {
val <caret>x = a.foo()
val y = b.foo()
val z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,10 @@
20 val <bold>x = a.foo()</bold>
20 val x = <bold>a.foo()</bold>
4 fun <bold>foo() = 1</bold>
4 fun foo() = <bold>1</bold>
8 override fun <bold>foo() = 2</bold>
8 override fun foo() = <bold>2</bold>
12 override fun <bold>foo() = 3</bold>
12 override fun foo() = <bold>3</bold>
16 override fun <bold>foo() = 4</bold>
16 override fun foo() = <bold>4</bold>
+19
View File
@@ -0,0 +1,19 @@
// FLOW: IN
open class A {
open fun foo() = 1
}
open class B : A() {
override fun foo() = 2
}
class C : B() {
override fun foo() = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo()
val <caret>y = b.foo()
val z = c.foo()
}
@@ -0,0 +1,6 @@
17 val <bold>y = b.foo()</bold>
17 val y = <bold>b.foo()</bold>
8 override fun <bold>foo() = 2</bold>
8 override fun foo() = <bold>2</bold>
12 override fun <bold>foo() = 3</bold>
12 override fun foo() = <bold>3</bold>
+17
View File
@@ -0,0 +1,17 @@
// FLOW: IN
open class A {
open val foo = 1
}
open class B(override val foo: Int) : A()
class C : B() {
override val foo = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val <caret>y = b.foo
val z = c.foo
}
@@ -0,0 +1,5 @@
15 val <bold>y = b.foo</bold>
15 val y = <bold>b.foo</bold>
7 open class B(override val <bold>foo: Int</bold>) : A()
10 override val <bold>foo = 3</bold>
10 override val foo = <bold>3</bold>
@@ -0,0 +1,22 @@
// FLOW: IN
open class A {
open val foo: Int
get() = 1
}
open class B : A() {
override val foo: Int
get() = 2
}
class C : B() {
override val foo: Int
get() = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val <caret>y = b.foo
val z = c.foo
}
@@ -0,0 +1,6 @@
20 val <bold>y = b.foo</bold>
20 val y = <bold>b.foo</bold>
9 override val <bold>foo: Int</bold>
10 get() = <bold>2</bold>
14 override val <bold>foo: Int</bold>
15 get() = <bold>3</bold>
+19
View File
@@ -0,0 +1,19 @@
// FLOW: IN
open class A {
open val foo = 1
}
open class B : A() {
override val foo = 2
}
class C : B() {
override val foo = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val <caret>y = b.foo
val z = c.foo
}
@@ -0,0 +1,6 @@
17 val <bold>y = b.foo</bold>
17 val y = <bold>b.foo</bold>
8 override val <bold>foo = 2</bold>
8 override val foo = <bold>2</bold>
12 override val <bold>foo = 3</bold>
12 override val foo = <bold>3</bold>