Analyze Data Flow: Support cross-language analysis

#KT-16833 Fixed
This commit is contained in:
Alexey Sedunov
2017-11-22 18:09:21 +03:00
parent 6cb68531ae
commit c6a9c36275
125 changed files with 1109 additions and 108 deletions
+11
View File
@@ -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;
}
}
+8
View File
@@ -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>;
@@ -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()
}
@@ -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>;
@@ -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()
}
@@ -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>;
@@ -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>;
+6
View File
@@ -0,0 +1,6 @@
class J {
void test() {
FunParamererKt.foo(1):
FunParamererKt.foo(1, "2"):
}
}
+1
View File
@@ -1,5 +1,6 @@
// FLOW: IN
@JvmOverloads
fun foo(<caret>n: Int, s: String = "???") {
}
+7 -3
View File
@@ -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
View File
@@ -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>
+5
View File
@@ -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 -1
View File
@@ -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")
@@ -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>)
@@ -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>)
@@ -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>);
@@ -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)
@@ -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>)
@@ -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>)
@@ -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>);
+15
View File
@@ -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;
}
}
+19
View File
@@ -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>) {
+5
View File
@@ -0,0 +1,5 @@
class D {
void test() {
int foo = TopLevelValKt.getFoo();
}
}
+6
View File
@@ -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
View File
@@ -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
View File
@@ -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>);
+3
View File
@@ -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
View File
@@ -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);
}
}
+13
View File
@@ -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>);
+4
View File
@@ -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>
+6
View File
@@ -0,0 +1,6 @@
class J {
void foo(int n) {
int y = n;
new K().bar(y);
}
}
+11
View File
@@ -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()
}
@@ -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()
}
@@ -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>
+5
View File
@@ -0,0 +1,5 @@
class J {
void test() {
int x = FunctionCallsKt.foo(2);
}
}
+1 -3
View File
@@ -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
View File
@@ -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