Analyze Data Flow: Support cross-language analysis
#KT-16833 Fixed
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
import kotlin.reflect.KProperty;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class D {
|
||||
public static D INSTANCE = new D();
|
||||
|
||||
int getValue(@Nullable Object thisRef, @NotNull KProperty<?> property) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: IN
|
||||
// RUNTIME_WITH_REFLECT
|
||||
|
||||
val foo: Int by D.INSTANCE
|
||||
|
||||
fun test() {
|
||||
val <caret>x = foo
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
9 return <bold>1</bold>;
|
||||
7 val <bold>x = foo</bold>
|
||||
7 val x = <bold>foo</bold>
|
||||
4 val <bold>foo: Int by D.INSTANCE</bold>
|
||||
9 return <bold>1</bold>;
|
||||
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
7 val <bold>x = foo</bold>
|
||||
7 val <bold>x = foo</bold>
|
||||
@@ -0,0 +1,4 @@
|
||||
7 val <bold>x = foo</bold>
|
||||
7 val x = <bold>foo</bold>
|
||||
4 val <bold>foo: Int by D.INSTANCE</bold>
|
||||
9 return <bold>1</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: IN
|
||||
|
||||
open class B : A {
|
||||
override fun foo() = 2
|
||||
}
|
||||
|
||||
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,10 @@
|
||||
4 override fun foo() = <bold>2</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
9 val y = <bold>b.foo()</bold>
|
||||
4 override fun <bold>foo() = 2</bold>
|
||||
4 override fun foo() = <bold>2</bold>
|
||||
|
||||
13 return <bold>4</bold>;
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
9 val y = <bold>b.foo()</bold>
|
||||
13 return <bold>4</bold>;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
@@ -0,0 +1,5 @@
|
||||
9 val <bold>y = b.foo()</bold>
|
||||
9 val y = <bold>b.foo()</bold>
|
||||
4 override fun <bold>foo() = 2</bold>
|
||||
4 override fun foo() = <bold>2</bold>
|
||||
13 return <bold>4</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: IN
|
||||
|
||||
interface C : A {
|
||||
override fun foo() = 3
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
4 override fun foo() = <bold>3</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
10 val z = <bold>c.foo()</bold>
|
||||
4 override fun <bold>foo() = 3</bold>
|
||||
4 override fun foo() = <bold>3</bold>
|
||||
|
||||
13 return <bold>4</bold>;
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
10 val z = <bold>c.foo()</bold>
|
||||
13 return <bold>4</bold>;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
@@ -0,0 +1,5 @@
|
||||
10 val <bold>z = c.foo()</bold>
|
||||
10 val z = <bold>c.foo()</bold>
|
||||
4 override fun <bold>foo() = 3</bold>
|
||||
4 override fun foo() = <bold>3</bold>
|
||||
13 return <bold>4</bold>;
|
||||
@@ -0,0 +1,15 @@
|
||||
class B implements A {
|
||||
public int foo() {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
interface C extends A {
|
||||
public int foo();
|
||||
}
|
||||
|
||||
class D extends B implements C {
|
||||
public int foo() {
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// FLOW: IN
|
||||
|
||||
interface A {
|
||||
fun foo() = 1
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
4 fun foo() = <bold>1</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
8 val x = <bold>a.foo()</bold>
|
||||
4 fun <bold>foo() = 1</bold>
|
||||
4 fun foo() = <bold>1</bold>
|
||||
|
||||
3 return <bold>2</bold>;
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
8 val x = <bold>a.foo()</bold>
|
||||
3 return <bold>2</bold>;
|
||||
|
||||
13 return <bold>4</bold>;
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
8 val x = <bold>a.foo()</bold>
|
||||
13 return <bold>4</bold>;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
@@ -0,0 +1,6 @@
|
||||
8 val <bold>x = a.foo()</bold>
|
||||
8 val x = <bold>a.foo()</bold>
|
||||
4 fun <bold>foo() = 1</bold>
|
||||
4 fun foo() = <bold>1</bold>
|
||||
13 return <bold>4</bold>;
|
||||
3 return <bold>2</bold>;
|
||||
@@ -0,0 +1,6 @@
|
||||
class J {
|
||||
void test() {
|
||||
FunParamererKt.foo(1):
|
||||
FunParamererKt.foo(1, "2"):
|
||||
}
|
||||
}
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// FLOW: IN
|
||||
|
||||
@JvmOverloads
|
||||
fun foo(<caret>n: Int, s: String = "???") {
|
||||
|
||||
}
|
||||
|
||||
+7
-3
@@ -1,4 +1,8 @@
|
||||
8 foo(<bold>1</bold>)
|
||||
3 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
8 foo(<bold>1</bold>)
|
||||
3 FunParamererKt.foo(<bold>1</bold>):
|
||||
4 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
3 FunParamererKt.foo(<bold>1</bold>):
|
||||
|
||||
9 foo(<bold>1</bold>)
|
||||
4 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
9 foo(<bold>1</bold>)
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
3 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
3 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
4 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
4 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
|
||||
|
||||
+8
-6
@@ -1,6 +1,8 @@
|
||||
3 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
8 foo(<bold>1</bold>)
|
||||
9 foo(<bold>1</bold>, "2")
|
||||
10 foo(<bold>1</bold>, s = "2")
|
||||
11 foo(n = <bold>1</bold>, s = "2")
|
||||
12 foo(s = "2", n = <bold>1</bold>)
|
||||
4 fun foo(<bold>n: Int</bold>, s: String = "???") {
|
||||
3 FunParamererKt.foo(<bold>1</bold>):
|
||||
4 FunParamererKt.foo(<bold>1</bold>, "2"):
|
||||
9 foo(<bold>1</bold>)
|
||||
10 foo(<bold>1</bold>, "2")
|
||||
11 foo(<bold>1</bold>, s = "2")
|
||||
12 foo(n = <bold>1</bold>, s = "2")
|
||||
13 foo(s = "2", n = <bold>1</bold>)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class J {
|
||||
void test() {
|
||||
FunParamererWithDefaultKt.foo(1):
|
||||
FunParamererWithDefaultKt.foo(1, "2"):
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
// FLOW: IN
|
||||
|
||||
@JvmOverloads
|
||||
fun foo(n: Int, <caret>s: String = "???") {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
9 foo(1, <bold>"2"</bold>)
|
||||
3 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
9 foo(1, <bold>"2"</bold>)
|
||||
4 FunParamererWithDefaultKt.foo(1, <bold>"2"</bold>):
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
4 FunParamererWithDefaultKt.foo(1, <bold>"2"</bold>):
|
||||
|
||||
3 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
3 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
3 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
10 foo(1, <bold>"2"</bold>)
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
10 foo(1, <bold>"2"</bold>)
|
||||
|
||||
4 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
4 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
3 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
3 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
3 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
3 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
9 foo(1, <bold>"2"</bold>)
|
||||
10 foo(1, s = <bold>"2"</bold>)
|
||||
11 foo(n = 1, s = <bold>"2"</bold>)
|
||||
12 foo(s = <bold>"2"</bold>, n = 1)
|
||||
4 fun foo(n: Int, <bold>s: String = "???"</bold>) {
|
||||
4 FunParamererWithDefaultKt.foo(1, <bold>"2"</bold>):
|
||||
4 fun foo(n: Int, s: String = <bold>"???"</bold>) {
|
||||
10 foo(1, <bold>"2"</bold>)
|
||||
11 foo(1, s = <bold>"2"</bold>)
|
||||
12 foo(n = 1, s = <bold>"2"</bold>)
|
||||
13 foo(s = <bold>"2"</bold>, n = 1)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class D extends B {
|
||||
public int foo() {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
@@ -10,3 +10,8 @@
|
||||
12 override fun <bold>foo() = 3</bold>
|
||||
12 override fun foo() = <bold>3</bold>
|
||||
|
||||
3 return <bold>5</bold>;
|
||||
17 val <bold>y = b.foo()</bold>
|
||||
17 val y = <bold>b.foo()</bold>
|
||||
3 return <bold>5</bold>;
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
17 val y = <bold>b.foo()</bold>
|
||||
8 override fun <bold>foo() = 2</bold>
|
||||
8 override fun foo() = <bold>2</bold>
|
||||
3 return <bold>5</bold>;
|
||||
12 override fun <bold>foo() = 3</bold>
|
||||
12 override fun foo() = <bold>3</bold>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class D extends B {
|
||||
public int getFoo() {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
@@ -9,3 +9,8 @@
|
||||
10 override val <bold>foo = 3</bold>
|
||||
10 override val foo = <bold>3</bold>
|
||||
|
||||
3 return <bold>5</bold>;
|
||||
15 val <bold>y = b.foo</bold>
|
||||
15 val y = <bold>b.foo</bold>
|
||||
3 return <bold>5</bold>;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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()
|
||||
3 return <bold>5</bold>;
|
||||
10 override val <bold>foo = 3</bold>
|
||||
10 override val foo = <bold>3</bold>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class D extends B {
|
||||
public int getFoo() {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
@@ -10,3 +10,8 @@
|
||||
14 override val <bold>foo: Int</bold>
|
||||
15 get() = <bold>3</bold>
|
||||
|
||||
3 return <bold>5</bold>;
|
||||
20 val <bold>y = b.foo</bold>
|
||||
20 val y = <bold>b.foo</bold>
|
||||
3 return <bold>5</bold>;
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
20 val y = <bold>b.foo</bold>
|
||||
9 override val <bold>foo: Int</bold>
|
||||
10 get() = <bold>2</bold>
|
||||
3 return <bold>5</bold>;
|
||||
14 override val <bold>foo: Int</bold>
|
||||
15 get() = <bold>3</bold>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class D extends B {
|
||||
public int getFoo() {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
@@ -10,3 +10,8 @@
|
||||
12 override val <bold>foo = 3</bold>
|
||||
12 override val foo = <bold>3</bold>
|
||||
|
||||
3 return <bold>5</bold>;
|
||||
17 val <bold>y = b.foo</bold>
|
||||
17 val y = <bold>b.foo</bold>
|
||||
3 return <bold>5</bold>;
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
17 val y = <bold>b.foo</bold>
|
||||
8 override val <bold>foo = 2</bold>
|
||||
8 override val foo = <bold>2</bold>
|
||||
3 return <bold>5</bold>;
|
||||
12 override val <bold>foo = 3</bold>
|
||||
12 override val foo = <bold>3</bold>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
class D extends A {
|
||||
D(int n, String s) {
|
||||
super(n, s);
|
||||
}
|
||||
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
new A(1);
|
||||
new A(1, "2");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class A(<caret>n: Int, s: String = "???")
|
||||
open class A @JvmOverloads constructor(<caret>n: Int, s: String = "???")
|
||||
|
||||
class B1: A(1)
|
||||
class B2: A(1, "2")
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
3 super(<bold>n</bold>, s);
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
|
||||
5 class B1: A(<bold>1</bold>)
|
||||
3 open class A(<bold>n: Int</bold>, s: String = "???")
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
5 class B1: A(<bold>1</bold>)
|
||||
|
||||
11 new A(<bold>1</bold>);
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
11 new A(<bold>1</bold>);
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
3 open class A(<bold>n: Int</bold>, s: String = "???")
|
||||
3 open class A(<bold>n: Int</bold>, s: String = "???")
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
3 open class A(<bold>n: Int</bold>, s: String = "???")
|
||||
3 open class A @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
5 class B1: A(<bold>1</bold>)
|
||||
6 class B2: A(<bold>1</bold>, "2")
|
||||
7 class B3: A(<bold>1</bold>, s = "2")
|
||||
@@ -9,3 +9,9 @@
|
||||
14 A(<bold>1</bold>, s = "2")
|
||||
15 A(n = <bold>1</bold>, s = "2")
|
||||
16 A(s = "2", n = <bold>1</bold>)
|
||||
3 super(<bold>n</bold>, s);
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
7 super(<bold>n</bold>);
|
||||
6 D(int <bold>n</bold>) {
|
||||
11 new A(<bold>1</bold>);
|
||||
12 new A(<bold>1</bold>, "2");
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
class D extends A {
|
||||
D(int n, String s) {
|
||||
super(n, s);
|
||||
}
|
||||
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
new A(1);
|
||||
new A(1, "2");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class A(n: Int, <caret>s: String = "???")
|
||||
open class A @JvmOverloads constructor(n: Int, <caret>s: String = "???")
|
||||
|
||||
class B1: A(1)
|
||||
class B2: A(1, "2")
|
||||
|
||||
+13
-4
@@ -1,8 +1,17 @@
|
||||
6 class B2: A(1, <bold>"2"</bold>)
|
||||
3 open class A(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
6 class B2: A(1, <bold>"2"</bold>)
|
||||
|
||||
3 open class A(n: Int, s: String = <bold>"???"</bold>)
|
||||
3 open class A(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A(n: Int, s: String = <bold>"???"</bold>)
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 super(n, <bold>s</bold>);
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
|
||||
3 open class A @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
|
||||
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
3 open class A(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
|
||||
|
||||
+5
-2
@@ -1,5 +1,5 @@
|
||||
3 open class A(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A(n: Int, s: String = <bold>"???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 open class A @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
6 class B2: A(1, <bold>"2"</bold>)
|
||||
7 class B3: A(1, s = <bold>"2"</bold>)
|
||||
8 class B4: A(n = 1, s = <bold>"2"</bold>)
|
||||
@@ -8,3 +8,6 @@
|
||||
14 A(1, s = <bold>"2"</bold>)
|
||||
15 A(n = 1, s = <bold>"2"</bold>)
|
||||
16 A(s = <bold>"2"</bold>, n = 1)
|
||||
3 super(n, <bold>s</bold>);
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
class D extends A {
|
||||
D(int n, String s) {
|
||||
super(n, s);
|
||||
}
|
||||
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
new A(1);
|
||||
new A(1, "2");
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class A {
|
||||
constructor(<caret>n: Int, s: String = "???")
|
||||
@JvmOverloads constructor(<caret>n: Int, s: String = "???")
|
||||
}
|
||||
|
||||
class B1: A(1)
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
3 super(<bold>n</bold>, s);
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
|
||||
7 class B1: A(<bold>1</bold>)
|
||||
4 constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
7 class B1: A(<bold>1</bold>)
|
||||
|
||||
11 new A(<bold>1</bold>);
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
11 new A(<bold>1</bold>);
|
||||
|
||||
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
4 constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
4 constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
4 constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
4 @JvmOverloads constructor(<bold>n: Int</bold>, s: String = "???")
|
||||
7 class B1: A(<bold>1</bold>)
|
||||
8 class B2: A(<bold>1</bold>, "2")
|
||||
9 class B3: A(<bold>1</bold>, s = "2")
|
||||
@@ -9,3 +9,9 @@
|
||||
16 A(<bold>1</bold>, s = "2")
|
||||
17 A(n = <bold>1</bold>, s = "2")
|
||||
18 A(s = "2", n = <bold>1</bold>)
|
||||
3 super(<bold>n</bold>, s);
|
||||
2 D(int <bold>n</bold>, String s) {
|
||||
7 super(<bold>n</bold>);
|
||||
6 D(int <bold>n</bold>) {
|
||||
11 new A(<bold>1</bold>);
|
||||
12 new A(<bold>1</bold>, "2");
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
class D extends A {
|
||||
D(int n, String s) {
|
||||
super(n, s);
|
||||
}
|
||||
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
new A(1);
|
||||
new A(1, "2");
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class A {
|
||||
constructor(n: Int, <caret>s: String = "???")
|
||||
@JvmOverloads constructor(n: Int, <caret>s: String = "???")
|
||||
}
|
||||
|
||||
class B1: A(1)
|
||||
|
||||
+13
-4
@@ -1,8 +1,17 @@
|
||||
8 class B2: A(1, <bold>"2"</bold>)
|
||||
4 constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
8 class B2: A(1, <bold>"2"</bold>)
|
||||
|
||||
4 constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
4 constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
3 super(n, <bold>s</bold>);
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
|
||||
4 @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
|
||||
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
[NotNull Values]
|
||||
4 constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
|
||||
|
||||
+5
-2
@@ -1,5 +1,5 @@
|
||||
4 constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, <bold>s: String = "???"</bold>)
|
||||
4 @JvmOverloads constructor(n: Int, s: String = <bold>"???"</bold>)
|
||||
8 class B2: A(1, <bold>"2"</bold>)
|
||||
9 class B3: A(1, s = <bold>"2"</bold>)
|
||||
10 class B4: A(n = 1, s = <bold>"2"</bold>)
|
||||
@@ -8,3 +8,6 @@
|
||||
16 A(1, s = <bold>"2"</bold>)
|
||||
17 A(n = 1, s = <bold>"2"</bold>)
|
||||
18 A(s = <bold>"2"</bold>, n = 1)
|
||||
3 super(n, <bold>s</bold>);
|
||||
2 D(int n, String <bold>s</bold>) {
|
||||
12 new A(1, <bold>"2"</bold>);
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import kotlin.reflect.KProperty;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class D {
|
||||
private String _value = "";
|
||||
|
||||
int getValue(@Nullable Object thisRef, @NotNull KProperty<?> property) {
|
||||
return _value;
|
||||
}
|
||||
|
||||
void setValue(@Nullable Object thisRef, @NotNull KProperty<?> property, @NotNull String value) {
|
||||
_value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// FLOW: IN
|
||||
// RUNTIME_WITH_REFLECT
|
||||
|
||||
class AClass(name1: String){
|
||||
var name by D()
|
||||
init {
|
||||
name = name1
|
||||
}
|
||||
|
||||
fun uses(){
|
||||
name = "bye"
|
||||
println("Now my name is '$<caret>name'")
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val a = AClass("hello")
|
||||
println("My name is '${a.name}'")
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
6 private String _value = <bold>""</bold>;
|
||||
12 println("Now my name is '$<bold>name</bold>'")
|
||||
5 var <bold>name by D()</bold>
|
||||
9 return <bold>_value</bold>;
|
||||
6 private String _value = <bold>""</bold>;
|
||||
|
||||
12 void setValue(@Nullable Object thisRef, @NotNull KProperty<?> property, @NotNull String <bold>value</bold>) {
|
||||
12 println("Now my name is '$<bold>name</bold>'")
|
||||
5 var <bold>name by D()</bold>
|
||||
9 return <bold>_value</bold>;
|
||||
13 _value = <bold>value</bold>;
|
||||
12 void setValue(@Nullable Object thisRef, @NotNull KProperty<?> property, @NotNull String <bold>value</bold>) {
|
||||
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
12 println("Now my name is '$<bold>name</bold>'")
|
||||
12 println("Now my name is '$<bold>name</bold>'")
|
||||
@@ -0,0 +1,6 @@
|
||||
12 println("Now my name is '$<bold>name</bold>'")
|
||||
5 var <bold>name by D()</bold>
|
||||
9 return <bold>_value</bold>;
|
||||
6 private String _value = <bold>""</bold>;
|
||||
13 _value = <bold>value</bold>;
|
||||
12 void setValue(@Nullable Object thisRef, @NotNull KProperty<?> property, @NotNull String <bold>value</bold>) {
|
||||
@@ -0,0 +1,5 @@
|
||||
class D {
|
||||
void test() {
|
||||
int foo = TopLevelValKt.getFoo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
class D {
|
||||
void test() {
|
||||
int foo = TopLevelVarKt.getFoo();
|
||||
TopLevelVarKt.setFoo(3);
|
||||
}
|
||||
}
|
||||
@@ -6,3 +6,7 @@
|
||||
3 var <bold>foo: Int = 1</bold>
|
||||
7 foo = <bold>2</bold>
|
||||
|
||||
4 TopLevelVarKt.setFoo(<bold>3</bold>);
|
||||
3 var <bold>foo: Int = 1</bold>
|
||||
4 TopLevelVarKt.setFoo(<bold>3</bold>);
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
3 var <bold>foo: Int = 1</bold>
|
||||
3 var foo: Int = <bold>1</bold>
|
||||
4 TopLevelVarKt.setFoo(<bold>3</bold>);
|
||||
7 foo = <bold>2</bold>
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
class D extends A {
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
A a = new A(3);
|
||||
int foo = a.getN();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,8 @@
|
||||
2 D(int <bold>n</bold>) {
|
||||
3 open class A(val <bold>n: Int</bold>)
|
||||
3 super(<bold>n</bold>);
|
||||
2 D(int <bold>n</bold>) {
|
||||
|
||||
5 class B : A(<bold>1</bold>)
|
||||
3 open class A(val <bold>n: Int</bold>)
|
||||
5 class B : A(<bold>1</bold>)
|
||||
@@ -6,3 +11,7 @@
|
||||
3 open class A(val <bold>n: Int</bold>)
|
||||
8 val z = A(<bold>2</bold>).n
|
||||
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
3 open class A(val <bold>n: Int</bold>)
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
3 open class A(val <bold>n: Int</bold>)
|
||||
5 class B : A(<bold>1</bold>)
|
||||
8 val z = A(<bold>2</bold>).n
|
||||
3 super(<bold>n</bold>);
|
||||
2 D(int <bold>n</bold>) {
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class D extends A {
|
||||
D(int n) {
|
||||
super(n);
|
||||
}
|
||||
|
||||
void test() {
|
||||
A a = new A(3);
|
||||
int foo = a.getN();
|
||||
a.setN(4);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,8 @@
|
||||
2 D(int <bold>n</bold>) {
|
||||
3 open class A(var <bold>n: Int</bold>) {
|
||||
3 super(<bold>n</bold>);
|
||||
2 D(int <bold>n</bold>) {
|
||||
|
||||
20 class B : A(<bold>1</bold>)
|
||||
3 open class A(var <bold>n: Int</bold>) {
|
||||
20 class B : A(<bold>1</bold>)
|
||||
@@ -10,3 +15,11 @@
|
||||
3 open class A(var <bold>n: Int</bold>) {
|
||||
24 A(<bold>3</bold>).n = 2
|
||||
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
3 open class A(var <bold>n: Int</bold>) {
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
|
||||
9 a.setN(<bold>4</bold>);
|
||||
3 open class A(var <bold>n: Int</bold>) {
|
||||
9 a.setN(<bold>4</bold>);
|
||||
|
||||
|
||||
@@ -2,5 +2,9 @@
|
||||
20 class B : A(<bold>1</bold>)
|
||||
23 val z = A(<bold>2</bold>).n
|
||||
24 A(<bold>3</bold>).n = 2
|
||||
3 super(<bold>n</bold>);
|
||||
2 D(int <bold>n</bold>) {
|
||||
7 A a = new A(<bold>3</bold>);
|
||||
9 a.setN(<bold>4</bold>);
|
||||
16 n = <bold>1</bold>
|
||||
24 A(3).n = <bold>2</bold>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user