Analyze Data Flow: Respect member hierarchies
#KT-11994 In Progress
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user