Data flow to/from here: supported expected/actual declarations and extension receivers
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
class JavaClass {
|
||||
void f() {
|
||||
KotlinUtil.extensionFun("x");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// FLOW: IN
|
||||
|
||||
@file: JvmName("KotlinUtil")
|
||||
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
fun <caret>Any.extensionFun() {
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
"".extensionFun()
|
||||
1.extensionFun()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
11 <bold>""</bold>.extensionFun()
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
11 <bold>""</bold>.extensionFun()
|
||||
|
||||
3 KotlinUtil.extensionFun(<bold>"x"</bold>);
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
3 KotlinUtil.extensionFun(<bold>"x"</bold>);
|
||||
|
||||
12 <bold>1</bold>.extensionFun()
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
12 <bold>1</bold>.extensionFun()
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
[NotNull Values]
|
||||
11 <bold>""</bold>.extensionFun()
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
11 <bold>""</bold>.extensionFun()
|
||||
12 <bold>1</bold>.extensionFun()
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
12 <bold>1</bold>.extensionFun()
|
||||
|
||||
[Other Values]
|
||||
3 KotlinUtil.extensionFun(<bold>"x"</bold>);
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
3 KotlinUtil.extensionFun(<bold>"x"</bold>);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
7 fun <bold>Any</bold>.extensionFun() {
|
||||
3 KotlinUtil.extensionFun(<bold>"x"</bold>);
|
||||
11 <bold>""</bold>.extensionFun()
|
||||
12 <bold>1</bold>.extensionFun()
|
||||
@@ -0,0 +1,10 @@
|
||||
// FLOW: IN
|
||||
|
||||
var <caret>Any.property: Int
|
||||
get() = 1
|
||||
set(value) { }
|
||||
|
||||
fun foo() {
|
||||
println("a".property)
|
||||
"b".property = 2
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
9 <bold>"b"</bold>.property = 2
|
||||
3 var <bold>Any</bold>.property: Int
|
||||
9 <bold>"b"</bold>.property = 2
|
||||
|
||||
8 println(<bold>"a"</bold>.property)
|
||||
3 var <bold>Any</bold>.property: Int
|
||||
8 println(<bold>"a"</bold>.property)
|
||||
@@ -0,0 +1,7 @@
|
||||
[NotNull Values]
|
||||
8 println(<bold>"a"</bold>.property)
|
||||
3 var <bold>Any</bold>.property: Int
|
||||
8 println(<bold>"a"</bold>.property)
|
||||
9 <bold>"b"</bold>.property = 2
|
||||
3 var <bold>Any</bold>.property: Int
|
||||
9 <bold>"b"</bold>.property = 2
|
||||
@@ -0,0 +1,3 @@
|
||||
3 var <bold>Any</bold>.property: Int
|
||||
8 println(<bold>"a"</bold>.property)
|
||||
9 <bold>"b"</bold>.property = 2
|
||||
@@ -0,0 +1,20 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class Base {
|
||||
open fun Int.extensionFun() {
|
||||
println(<caret>this)
|
||||
}
|
||||
|
||||
fun baseF() {
|
||||
1.extensionFun()
|
||||
}
|
||||
}
|
||||
|
||||
class Derived : Base() {
|
||||
override fun Int.extensionFun() {
|
||||
}
|
||||
|
||||
fun derivedF() {
|
||||
2.extensionFun()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
5 println(<bold>this</bold>)
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
5 println(<bold>this</bold>)
|
||||
5 println(<bold>this</bold>)
|
||||
@@ -0,0 +1,3 @@
|
||||
5 println(<bold>this</bold>)
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
@@ -0,0 +1,20 @@
|
||||
// FLOW: IN
|
||||
|
||||
open class Base {
|
||||
open fun <caret>Int.extensionFun() {
|
||||
println(this)
|
||||
}
|
||||
|
||||
fun baseF() {
|
||||
1.extensionFun()
|
||||
}
|
||||
}
|
||||
|
||||
class Derived : Base() {
|
||||
override fun Int.extensionFun() {
|
||||
}
|
||||
|
||||
fun derivedF() {
|
||||
2.extensionFun()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
|
||||
18 <bold>2</bold>.extensionFun()
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
18 <bold>2</bold>.extensionFun()
|
||||
@@ -0,0 +1,7 @@
|
||||
[NotNull Values]
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
18 <bold>2</bold>.extensionFun()
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
18 <bold>2</bold>.extensionFun()
|
||||
@@ -0,0 +1,3 @@
|
||||
4 open fun <bold>Int</bold>.extensionFun() {
|
||||
9 <bold>1</bold>.extensionFun()
|
||||
18 <bold>2</bold>.extensionFun()
|
||||
@@ -0,0 +1,9 @@
|
||||
// FLOW: IN
|
||||
|
||||
fun Any.extensionFun(): Any {
|
||||
return this
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
val <caret>x = "".extensionFun()
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
8 val x = <bold>""</bold>.extensionFun()
|
||||
8 val <bold>x = "".extensionFun()</bold>
|
||||
8 val x = <bold>"".extensionFun()</bold>
|
||||
3 fun Any.<bold>extensionFun(): Any {</bold>
|
||||
4 return <bold>this</bold>
|
||||
3 fun <bold>Any</bold>.extensionFun(): Any {
|
||||
8 val x = <bold>""</bold>.extensionFun()
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
8 val <bold>x = "".extensionFun()</bold>
|
||||
8 val <bold>x = "".extensionFun()</bold>
|
||||
@@ -0,0 +1,6 @@
|
||||
8 val <bold>x = "".extensionFun()</bold>
|
||||
8 val x = <bold>"".extensionFun()</bold>
|
||||
3 fun Any.<bold>extensionFun(): Any {</bold>
|
||||
4 return <bold>this</bold>
|
||||
3 fun <bold>Any</bold>.extensionFun(): Any {
|
||||
8 val x = <bold>""</bold>.extensionFun()
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: IN
|
||||
|
||||
val Any.extensionProp: Any
|
||||
get() = this
|
||||
|
||||
fun foo() {
|
||||
val <caret>x = "".extensionProp
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
7 val x = <bold>""</bold>.extensionProp
|
||||
7 val <bold>x = "".extensionProp</bold>
|
||||
7 val x = <bold>"".extensionProp</bold>
|
||||
3 val Any.<bold>extensionProp: Any</bold>
|
||||
4 get() = <bold>this</bold>
|
||||
3 val <bold>Any</bold>.extensionProp: Any
|
||||
7 val x = <bold>""</bold>.extensionProp
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[NotNull Values]
|
||||
7 val <bold>x = "".extensionProp</bold>
|
||||
7 val <bold>x = "".extensionProp</bold>
|
||||
@@ -0,0 +1,6 @@
|
||||
7 val <bold>x = "".extensionProp</bold>
|
||||
7 val x = <bold>"".extensionProp</bold>
|
||||
3 val Any.<bold>extensionProp: Any</bold>
|
||||
4 get() = <bold>this</bold>
|
||||
3 val <bold>Any</bold>.extensionProp: Any
|
||||
7 val x = <bold>""</bold>.extensionProp
|
||||
@@ -0,0 +1,9 @@
|
||||
package sample
|
||||
|
||||
expect class ExpectClass() {
|
||||
fun foo(p: Any)
|
||||
}
|
||||
|
||||
fun f(c: ExpectClass) {
|
||||
c.foo(1)
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// FLOW: IN
|
||||
|
||||
package sample
|
||||
|
||||
actual class ExpectClass {
|
||||
actual fun foo(p: Any) {
|
||||
println(<caret>p)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
7 println(<bold>p</bold>)
|
||||
6 actual fun foo(<bold>p: Any</bold>) {
|
||||
8 c.foo(<bold>1</bold>)
|
||||
@@ -0,0 +1,5 @@
|
||||
expect fun foo(p: Any)
|
||||
|
||||
fun bar() {
|
||||
foo(1)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// FLOW: IN
|
||||
|
||||
actual fun foo(p: Any) {
|
||||
println(<caret>p)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
4 println(<bold>p</bold>)
|
||||
3 actual fun foo(<bold>p: Any</bold>) {
|
||||
4 foo(<bold>1</bold>)
|
||||
@@ -0,0 +1,11 @@
|
||||
// FLOW: OUT
|
||||
|
||||
package sample
|
||||
|
||||
expect class ExpectClass() {
|
||||
fun foo(p: Any)
|
||||
}
|
||||
|
||||
fun f(c: ExpectClass) {
|
||||
c.foo(<caret>1)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package sample
|
||||
|
||||
actual class ExpectClass {
|
||||
actual fun foo(p: Any) {
|
||||
println(p)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
10 c.foo(<bold>1</bold>)
|
||||
6 fun foo(<bold>p: Any</bold>)
|
||||
4 actual fun foo(<bold>p: Any</bold>) {
|
||||
5 println(<bold>p</bold>)
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: OUT
|
||||
|
||||
expect fun Any.foo(): Any
|
||||
|
||||
fun bar() {
|
||||
val result = <caret>1.foo()
|
||||
println(result)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
actual fun Any.foo(): Any {
|
||||
return this
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
6 val result = <bold>1</bold>.foo()
|
||||
3 expect fun <bold>Any</bold>.foo(): Any
|
||||
1 actual fun <bold>Any</bold>.foo(): Any {
|
||||
2 return <bold>this</bold>
|
||||
1 actual fun Any.<bold>foo(): Any {</bold>
|
||||
6 val result = 1.<bold>foo()</bold>
|
||||
6 val <bold>result = 1.foo()</bold>
|
||||
7 println(<bold>result</bold>)
|
||||
@@ -0,0 +1,7 @@
|
||||
// FLOW: OUT
|
||||
|
||||
expect fun foo(p: Any)
|
||||
|
||||
fun bar() {
|
||||
foo(<caret>1)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
actual fun foo(p: Any) {
|
||||
println(p)
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
6 foo(<bold>1</bold>)
|
||||
3 expect fun foo(<bold>p: Any</bold>)
|
||||
1 actual fun foo(<bold>p: Any</bold>) {
|
||||
2 println(<bold>p</bold>)
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: IN
|
||||
|
||||
expect fun foo(p: Any): Any
|
||||
|
||||
fun bar() {
|
||||
val result = foo(1)
|
||||
println(<caret>result)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
actual fun foo(p: Any): Any {
|
||||
return p
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
7 println(<bold>result</bold>)
|
||||
6 val <bold>result = foo(1)</bold>
|
||||
6 val result = <bold>foo(1)</bold>
|
||||
1 actual fun <bold>foo(p: Any): Any {</bold>
|
||||
2 return <bold>p</bold>
|
||||
1 actual fun foo(<bold>p: Any</bold>): Any {
|
||||
6 val result = foo(<bold>1</bold>)
|
||||
3 expect fun <bold>foo(p: Any): Any</bold>
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: OUT
|
||||
|
||||
expect fun foo(p: Any): Any
|
||||
|
||||
fun bar() {
|
||||
val result = foo(<caret>1)
|
||||
println(result)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
actual fun foo(p: Any): Any {
|
||||
return p
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
6 val result = foo(<bold>1</bold>)
|
||||
3 expect fun foo(<bold>p: Any</bold>): Any
|
||||
1 actual fun foo(<bold>p: Any</bold>): Any {
|
||||
2 return <bold>p</bold>
|
||||
1 actual fun <bold>foo(p: Any): Any {</bold>
|
||||
6 val result = <bold>foo(1)</bold>
|
||||
6 val <bold>result = foo(1)</bold>
|
||||
7 println(<bold>result</bold>)
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: IN
|
||||
|
||||
expect val Int.property: Any
|
||||
|
||||
fun bar() {
|
||||
val result = 1.property
|
||||
println(<caret>result)
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
actual val Int.property: Any
|
||||
get() = this
|
||||
@@ -0,0 +1,8 @@
|
||||
7 println(<bold>result</bold>)
|
||||
6 val <bold>result = 1.property</bold>
|
||||
6 val result = <bold>1.property</bold>
|
||||
1 actual val Int.<bold>property: Any</bold>
|
||||
2 get() = <bold>this</bold>
|
||||
1 actual val <bold>Int</bold>.property: Any
|
||||
6 val result = <bold>1</bold>.property
|
||||
3 expect val Int.<bold>property: Any</bold>
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: OUT
|
||||
|
||||
expect val Int.property: Any
|
||||
|
||||
fun bar() {
|
||||
val result = <caret>1.property
|
||||
println(result)
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
actual val Int.property: Any
|
||||
get() = this
|
||||
@@ -0,0 +1,8 @@
|
||||
6 val result = <bold>1</bold>.property
|
||||
3 expect val <bold>Int</bold>.property: Any
|
||||
1 actual val <bold>Int</bold>.property: Any
|
||||
2 get() = <bold>this</bold>
|
||||
2 <bold>get() = this</bold>
|
||||
6 val result = 1.<bold>property</bold>
|
||||
6 val <bold>result = 1.property</bold>
|
||||
7 println(<bold>result</bold>)
|
||||
@@ -5,5 +5,18 @@
|
||||
22 DEREFERENCE: <bold>x</bold> += 1
|
||||
23 DEREFERENCE: <bold>x</bold> *= 1
|
||||
25 -<bold>x</bold>
|
||||
12 operator fun <bold>A</bold>.unaryMinus() = this
|
||||
12 operator fun A.unaryMinus() = <bold>this</bold>
|
||||
12 operator fun A.<bold>unaryMinus() = this</bold>
|
||||
25 <bold>-x</bold>
|
||||
26 <bold>x</bold> - 1
|
||||
11 operator fun <bold>A</bold>.minus(n: Int) = this
|
||||
11 operator fun A.minus(n: Int) = <bold>this</bold>
|
||||
11 operator fun A.<bold>minus(n: Int) = this</bold>
|
||||
26 <bold>x - 1</bold>
|
||||
28 <bold>x -= 1</bold>
|
||||
17 DUPLICATE: var <bold>x = A()</bold>
|
||||
29 <bold>x</bold> /= 1
|
||||
14 operator fun <bold>A</bold>.divAssign(n: Int) = this
|
||||
14 operator fun A.divAssign(n: Int) = <bold>this</bold>
|
||||
14 operator fun A.<bold>divAssign(n: Int) = this</bold>
|
||||
|
||||
@@ -2,10 +2,14 @@
|
||||
15 DEREFERENCE: <bold>x</bold>.foo()
|
||||
16 DEREFERENCE: <bold>x</bold>.bar
|
||||
17 <bold>x</bold>.fooExt()
|
||||
9 fun <bold>A</bold>.fooExt() = 1
|
||||
18 <bold>x</bold>.barExt
|
||||
10 val <bold>A</bold>.barExt: Int get() = 2
|
||||
20 val y: A? = <bold>x</bold>
|
||||
20 val <bold>y: A? = x</bold>
|
||||
22 DEREFERENCE: <bold>y</bold>?.foo()
|
||||
23 DEREFERENCE: <bold>y</bold>?.bar
|
||||
24 <bold>y</bold>?.fooExt()
|
||||
9 DUPLICATE: fun <bold>A</bold>.fooExt() = 1
|
||||
25 <bold>y</bold>?.barExt
|
||||
10 DUPLICATE: val <bold>A</bold>.barExt: Int get() = 2
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// FLOW: OUT
|
||||
|
||||
fun String.extensionFun(): Any = this
|
||||
|
||||
fun foo() {
|
||||
val x = <caret>"".extensionFun()
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
6 val x = <bold>""</bold>.extensionFun()
|
||||
3 fun <bold>String</bold>.extensionFun(): Any = this
|
||||
3 fun String.extensionFun(): Any = <bold>this</bold>
|
||||
3 fun String.<bold>extensionFun(): Any = this</bold>
|
||||
6 val x = "".<bold>extensionFun()</bold>
|
||||
6 val <bold>x = "".extensionFun()</bold>
|
||||
@@ -0,0 +1,8 @@
|
||||
// FLOW: OUT
|
||||
|
||||
val String.extensionProp: Any
|
||||
get() = this
|
||||
|
||||
fun foo() {
|
||||
val x = <caret>"".extensionProp
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
7 val x = <bold>""</bold>.extensionProp
|
||||
3 val <bold>String</bold>.extensionProp: Any
|
||||
4 get() = <bold>this</bold>
|
||||
4 <bold>get() = this</bold>
|
||||
7 val x = "".<bold>extensionProp</bold>
|
||||
7 val <bold>x = "".extensionProp</bold>
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// FLOW: OUT
|
||||
|
||||
class C {
|
||||
fun String.extensionFun(): Any {
|
||||
with("A") {
|
||||
println(this.length)
|
||||
println(this@extensionFun.length)
|
||||
}
|
||||
return this@C
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
val x = <caret>"".extensionFun()
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T, R> with(receiver: T, block: T.() -> R): R {
|
||||
return receiver.block()
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
13 val x = <bold>""</bold>.extensionFun()
|
||||
4 fun <bold>String</bold>.extensionFun(): Any {
|
||||
7 println(<bold>this@extensionFun</bold>.length)
|
||||
Reference in New Issue
Block a user