Analyze Data Flow: Support cross-language analysis
#KT-16833 Fixed
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
class J {
|
||||
void foo(int n) {
|
||||
int y = n;
|
||||
new K().bar(y);
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// FLOW: OUT
|
||||
class K {
|
||||
fun bar(m: Int) {
|
||||
val z = m
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val x = <caret>1
|
||||
J().foo(x)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
8 val x = <bold>1</bold>
|
||||
8 val <bold>x = 1</bold>
|
||||
9 J().foo(<bold>x</bold>)
|
||||
2 void foo(int <bold>n</bold>) {
|
||||
3 int y = <bold>n</bold>;
|
||||
3 int <bold>y = n;</bold>
|
||||
4 new K().bar(<bold>y</bold>);
|
||||
3 fun bar(<bold>m: Int</bold>) {
|
||||
4 val z = <bold>m</bold>
|
||||
4 val <bold>z = m</bold>
|
||||
@@ -0,0 +1,13 @@
|
||||
class J extends A {
|
||||
J() {
|
||||
|
||||
}
|
||||
|
||||
J(int n) {
|
||||
super();
|
||||
}
|
||||
|
||||
void test() {
|
||||
A a = new A();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// FLOW: OUT
|
||||
|
||||
open class A<caret>() {
|
||||
constructor(n: Int) : this()
|
||||
}
|
||||
|
||||
class B : A()
|
||||
|
||||
class C : A {
|
||||
constructor() : super()
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val x = A()
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
3 open class A<bold>()</bold> {
|
||||
7 class B : <bold>A()</bold>
|
||||
14 val x = <bold>A()</bold>
|
||||
14 val <bold>x = A()</bold>
|
||||
2 <bold>J() {</bold>
|
||||
7 <bold>super</bold>();
|
||||
4 constructor(n: Int) : <bold>this()</bold>
|
||||
10 constructor() : <bold>super()</bold>
|
||||
11 A a = new <bold>A</bold>();
|
||||
@@ -0,0 +1,13 @@
|
||||
interface A {
|
||||
public int foo();
|
||||
}
|
||||
|
||||
class B implements A {
|
||||
public int foo() {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
interface C extends A {
|
||||
public int foo();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// FLOW: OUT
|
||||
|
||||
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,22 @@
|
||||
4 override fun foo() = <bold>4</bold>
|
||||
4 override fun <bold>foo() = 4</bold>
|
||||
11 val u = d.<bold>foo()</bold>
|
||||
11 val <bold>u = d.foo()</bold>
|
||||
2 public int <bold>foo();</bold>
|
||||
8 val x = a.<bold>foo()</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
9 val y = b.<bold>foo()</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
10 val z = c.<bold>foo()</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
11 DUPLICATE: val u = d.<bold>foo()</bold>
|
||||
6 public int <bold>foo() {</bold>
|
||||
9 DUPLICATE: val y = b.<bold>foo()</bold>
|
||||
11 DUPLICATE: val u = d.<bold>foo()</bold>
|
||||
8 DUPLICATE: val x = a.<bold>foo()</bold>
|
||||
10 DUPLICATE: val z = c.<bold>foo()</bold>
|
||||
12 public int <bold>foo();</bold>
|
||||
10 DUPLICATE: val z = c.<bold>foo()</bold>
|
||||
11 DUPLICATE: val u = d.<bold>foo()</bold>
|
||||
8 DUPLICATE: val x = a.<bold>foo()</bold>
|
||||
9 DUPLICATE: val y = b.<bold>foo()</bold>
|
||||
@@ -0,0 +1,15 @@
|
||||
// FLOW: OUT
|
||||
|
||||
interface A {
|
||||
public int foo();
|
||||
}
|
||||
|
||||
interface C extends A {
|
||||
public int foo();
|
||||
}
|
||||
|
||||
class D extends B implements C {
|
||||
public int foo() {
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// FLOW: OUT
|
||||
|
||||
open class B : A {
|
||||
override fun foo() = <caret>2
|
||||
}
|
||||
|
||||
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,12 @@
|
||||
4 override fun foo() = <bold>2</bold>
|
||||
4 override fun <bold>foo() = 2</bold>
|
||||
9 val y = b.<bold>foo()</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
4 public int <bold>foo();</bold>
|
||||
8 val x = a.<bold>foo()</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
10 val z = c.<bold>foo()</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
11 val u = d.<bold>foo()</bold>
|
||||
11 val <bold>u = d.foo()</bold>
|
||||
9 DUPLICATE: val y = b.<bold>foo()</bold>
|
||||
@@ -0,0 +1,15 @@
|
||||
interface A {
|
||||
public int foo();
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
public int foo() {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
class D extends B implements C {
|
||||
public int foo() {
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// FLOW: OUT
|
||||
|
||||
interface C : A {
|
||||
override fun foo() = <caret>3
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
4 override fun foo() = <bold>3</bold>
|
||||
4 override fun <bold>foo() = 3</bold>
|
||||
10 val z = c.<bold>foo()</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
2 public int <bold>foo();</bold>
|
||||
8 val x = a.<bold>foo()</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
9 val y = b.<bold>foo()</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
11 val u = d.<bold>foo()</bold>
|
||||
11 val <bold>u = d.foo()</bold>
|
||||
10 DUPLICATE: val z = c.<bold>foo()</bold>
|
||||
@@ -0,0 +1,5 @@
|
||||
class J {
|
||||
void test() {
|
||||
int x = FunctionCallsKt.foo(2);
|
||||
}
|
||||
}
|
||||
+1
-3
@@ -1,8 +1,6 @@
|
||||
// FLOW: OUT
|
||||
|
||||
fun <caret>foo(n: Int) {
|
||||
|
||||
}
|
||||
fun <caret>foo(n: Int) = n + 1
|
||||
|
||||
fun test(m: Int) {
|
||||
val x = foo(1)
|
||||
|
||||
+4
-3
@@ -1,3 +1,4 @@
|
||||
3 fun <bold>foo(n: Int) {</bold>
|
||||
8 val x = <bold>foo(1)</bold>
|
||||
8 val <bold>x = foo(1)</bold>
|
||||
3 fun <bold>foo(n: Int) = n + 1</bold>
|
||||
3 int x = FunctionCallsKt.<bold>foo</bold>(2);
|
||||
6 val x = <bold>foo(1)</bold>
|
||||
6 val <bold>x = foo(1)</bold>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class J {
|
||||
void test() {
|
||||
int x = new A().x;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// FLOW: OUT
|
||||
|
||||
class A {
|
||||
@JvmField val <caret>x = 1
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
4 @JvmField val <bold>x = 1</bold>
|
||||
3 int x = new A().<bold>x</bold>;
|
||||
3 int <bold>x = new A().x;</bold>
|
||||
@@ -0,0 +1,5 @@
|
||||
class J {
|
||||
void test() {
|
||||
int x = new A().getX();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
4 val <bold>x = 1</bold>
|
||||
3 int x = new A().<bold>getX</bold>();
|
||||
6 val y = <bold>x</bold>
|
||||
6 val <bold>y = x</bold>
|
||||
11 z = <bold>x</bold>
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
class A {
|
||||
int foo() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
class C extends B {
|
||||
int foo() {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// FLOW: OUT
|
||||
|
||||
open class B : A() {
|
||||
override fun foo() = <caret>2
|
||||
}
|
||||
|
||||
fun test(a: A, b: B, c: C) {
|
||||
val x = a.foo()
|
||||
val y = b.foo()
|
||||
val z = c.foo()
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
4 override fun foo() = <bold>2</bold>
|
||||
4 override fun <bold>foo() = 2</bold>
|
||||
9 val y = b.<bold>foo()</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
2 int <bold>foo() {</bold>
|
||||
8 val x = a.<bold>foo()</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
10 val z = c.<bold>foo()</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
9 DUPLICATE: val y = b.<bold>foo()</bold>
|
||||
@@ -0,0 +1,9 @@
|
||||
class J extends A {
|
||||
J() {
|
||||
super(1);
|
||||
}
|
||||
|
||||
void test() {
|
||||
A a = new A(1);
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,7 @@
|
||||
7 class B : <bold>A(1)</bold>
|
||||
14 val x = <bold>A(1)</bold>
|
||||
14 val <bold>x = A(1)</bold>
|
||||
3 <bold>super</bold>(1);
|
||||
4 constructor() : <bold>this(1)</bold>
|
||||
10 constructor() : <bold>super(1)</bold>
|
||||
7 A a = new <bold>A</bold>(1);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class J extends A {
|
||||
J() {
|
||||
super(1);
|
||||
}
|
||||
|
||||
void test() {
|
||||
A a = new A(1);
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,7 @@
|
||||
9 class B : <bold>A(1)</bold>
|
||||
16 val x = <bold>A(1)</bold>
|
||||
16 val <bold>x = A(1)</bold>
|
||||
3 <bold>super</bold>(1);
|
||||
6 constructor() : <bold>this(1)</bold>
|
||||
12 constructor() : <bold>super(1)</bold>
|
||||
7 A a = new <bold>A</bold>(1);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class J {
|
||||
void test() {
|
||||
int x = TopLevelPropertyUsagesKt.getX();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
3 val <bold>x = 1</bold>
|
||||
3 int x = TopLevelPropertyUsagesKt.<bold>getX</bold>();
|
||||
5 val y = <bold>x</bold>
|
||||
5 val <bold>y = x</bold>
|
||||
8 val y = <bold>x</bold>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class J {
|
||||
void test() {
|
||||
int n = new A(1).getN();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
3 class A(val <bold>n: Int</bold>) {
|
||||
3 int n = new A(1).<bold>getN</bold>();
|
||||
4 val x = <bold>n</bold>
|
||||
4 val <bold>x = n</bold>
|
||||
9 y = <bold>n</bold>
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class J {
|
||||
void test() {
|
||||
int n = new A(1).getN();
|
||||
new A(1).setN(2);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
3 class A(var <bold>n: Int</bold>) {
|
||||
3 int n = new A(1).<bold>getN</bold>();
|
||||
4 val x = <bold>n</bold>
|
||||
4 val <bold>x = n</bold>
|
||||
9 y = <bold>n</bold>
|
||||
|
||||
Reference in New Issue
Block a user