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: OUT
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() = <caret>4
}
fun test(a: A, b: B, c: C, d: D) {
val x = a.foo()
val y = b.foo()
val z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,10 @@
16 override fun foo() = <bold>4</bold>
16 override fun <bold>foo() = 4</bold>
23 val u = d.<bold>foo()</bold>
23 val <bold>u = d.foo()</bold>
20 val x = a.<bold>foo()</bold>
20 val <bold>x = a.foo()</bold>
21 val y = b.<bold>foo()</bold>
21 val <bold>y = b.foo()</bold>
22 val z = c.<bold>foo()</bold>
22 val <bold>z = c.foo()</bold>
@@ -0,0 +1,24 @@
// FLOW: OUT
interface A {
fun foo() = 1
}
open class B : A {
override fun foo() = <caret>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 z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,6 @@
8 override fun foo() = <bold>2</bold>
8 override fun <bold>foo() = 2</bold>
21 val y = b.<bold>foo()</bold>
21 val <bold>y = b.foo()</bold>
20 val x = a.<bold>foo()</bold>
20 val <bold>x = a.foo()</bold>
@@ -0,0 +1,24 @@
// FLOW: OUT
interface A {
fun foo() = 1
}
open class B : A {
override fun foo() = 2
}
interface C : A {
override fun foo() = <caret>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 z = c.foo()
val u = d.foo()
}
@@ -0,0 +1,6 @@
12 override fun foo() = <bold>3</bold>
12 override fun <bold>foo() = 3</bold>
22 val z = c.<bold>foo()</bold>
22 val <bold>z = c.foo()</bold>
20 val x = a.<bold>foo()</bold>
20 val <bold>x = a.foo()</bold>
@@ -0,0 +1,19 @@
// FLOW: OUT
open class A {
open fun foo() = 1
}
open class B : A() {
override fun foo() = <caret>2
}
class C : B() {
override fun foo() = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo()
val y = b.foo()
val z = c.foo()
}
@@ -0,0 +1,6 @@
8 override fun foo() = <bold>2</bold>
8 override fun <bold>foo() = 2</bold>
17 val y = b.<bold>foo()</bold>
17 val <bold>y = b.foo()</bold>
16 val x = a.<bold>foo()</bold>
16 val <bold>x = a.foo()</bold>
+17
View File
@@ -0,0 +1,17 @@
// FLOW: OUT
open class A() {
open val foo = 1
}
open class B(override val foo: Int) : A()
class C : B() {
override val foo = <caret>3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val y = b.foo
val z = c.foo
}
@@ -0,0 +1,5 @@
10 override val foo = <bold>3</bold>
10 override val <bold>foo = 3</bold>
16 val <bold>z = c.foo</bold>
14 val <bold>x = a.foo</bold>
15 val <bold>y = b.foo</bold>
@@ -0,0 +1,22 @@
// FLOW: OUT
open class A {
open val foo: Int
get() = 1
}
open class B : A() {
override val foo: Int
get() = <caret>2
}
class C : B() {
override val foo: Int
get() = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val y = b.foo
val z = c.foo
}
@@ -0,0 +1,4 @@
10 get() = <bold>2</bold>
10 <bold>get() = 2</bold>
20 val <bold>y = b.foo</bold>
19 val <bold>x = a.foo</bold>
@@ -0,0 +1,19 @@
// FLOW: OUT
open class A {
open val foo = 1
}
open class B : A() {
override val foo = <caret>2
}
class C : B() {
override val foo = 3
}
fun test(a: A, b: B, c: C) {
val x = a.foo
val y = b.foo
val z = c.foo
}
@@ -0,0 +1,4 @@
8 override val foo = <bold>2</bold>
8 override val <bold>foo = 2</bold>
17 val <bold>y = b.foo</bold>
16 val <bold>x = a.foo</bold>