Changed name resolution for dynamic extension. Added annotation DynamicExtension.

This commit is contained in:
Stanislav Erokhin
2016-12-14 00:50:16 +03:00
parent 91fcb15f3e
commit 457918a6dd
34 changed files with 319 additions and 61 deletions
@@ -0,0 +1,8 @@
public final var foo: dynamic
public final fun <get-foo>(): dynamic
public final fun <set-foo>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var bar: dynamic
public final fun <get-bar>(): dynamic
public final fun <set-bar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final fun dynamicProperty(): dynamic
public final fun dynamicParameter(): dynamic
@@ -0,0 +1,17 @@
// !MARK_DYNAMIC_CALLS
fun withDynamicReceiver(<!UNUSED_PARAMETER!>d<!>: dynamic.() -> Unit) {}
fun test() = withDynamicReceiver {
<!DEBUG_INFO_DYNAMIC!>foo<!>
<!DEBUG_INFO_DYNAMIC!>bar<!> = 1
}
fun test2() = withDynamicReceiver(fun dynamic.() {})
val dynamicProperty: dynamic.() -> Unit = TODO()
fun test(d: dynamic, <!UNUSED_PARAMETER!>dynamicParameter<!>: dynamic.() -> Unit) {
d.<!DEBUG_INFO_DYNAMIC!>dynamicProperty<!>()
d.<!DEBUG_INFO_DYNAMIC!>dynamicParameter<!>()
}
@@ -0,0 +1,7 @@
package
public val dynamicProperty: dynamic.() -> kotlin.Unit
public fun test(): kotlin.Unit
public fun test(/*0*/ d: dynamic, /*1*/ dynamicParameter: dynamic.() -> kotlin.Unit): kotlin.Unit
public fun test2(): kotlin.Unit
public fun withDynamicReceiver(/*0*/ d: dynamic.() -> kotlin.Unit): kotlin.Unit
@@ -7,7 +7,7 @@ fun test() {
}
}
fun <T> dynamic(body: dynamic.() -> T): T {
fun <T> dynamic(<!UNUSED_PARAMETER!>body<!>: dynamic.() -> T): T {
val topLevel = null
return topLevel.body()
return topLevel.<!UNRESOLVED_REFERENCE!>body<!>()
}
@@ -0,0 +1,28 @@
// !MARK_DYNAMIC_CALLS
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.DynamicExtension
fun dynamic.onDynamicFun() = 1
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.DynamicExtension
var dynamic.onDynamicProperty
get() = ""
set(value) {}
fun test(d: dynamic, a: Any?) {
eatT<Int>(d.onDynamicFun())
eatT<String>(d.onDynamicProperty)
d.onDynamicProperty = ""
eatT<Iterator<*>>(d.iterator())
for (item in d) {
println(item)
}
a.<!UNRESOLVED_REFERENCE!>onDynamicFun<!>()
a.<!UNRESOLVED_REFERENCE!>onDynamicProperty<!>
}
fun <T> eatT(<!UNUSED_PARAMETER!>t<!>: T) {}
@@ -0,0 +1,6 @@
package
@kotlin.Suppress(names = {"INVISIBLE_MEMBER", "INVISIBLE_REFERENCE"}) @kotlin.internal.DynamicExtension public var dynamic.onDynamicProperty: kotlin.String
public fun </*0*/ T> eatT(/*0*/ t: T): kotlin.Unit
public fun test(/*0*/ d: dynamic, /*1*/ a: kotlin.Any?): kotlin.Unit
@kotlin.Suppress(names = {"INVISIBLE_MEMBER", "INVISIBLE_REFERENCE"}) @kotlin.internal.DynamicExtension public fun dynamic.onDynamicFun(): kotlin.Int
@@ -3,7 +3,7 @@ object X2
class Inv<T>
fun dynamic.foo() = X1
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.foo() = X1
fun <T> Inv<T>.foo() = X2
fun test(): X2 = Inv<Any>().foo()
@@ -22,6 +22,12 @@ public final var onNullableAnyVal: dynamic
public final var onStringVal: dynamic
public final fun <get-onStringVal>(): dynamic
public final fun <set-onStringVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var onDynamicVal: dynamic
public final fun <get-onDynamicVal>(): dynamic
public final fun <set-onDynamicVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var onDynamicVal: dynamic
public final fun <get-onDynamicVal>(): dynamic
public final fun <set-onDynamicVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberVal: dynamic
public final fun <get-memberVal>(): dynamic
public final fun <set-memberVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
@@ -19,29 +19,29 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onStringVal<!> = 1
<!VAL_REASSIGNMENT!>d.onDynamicVal<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>onDynamicVal<!> = 1
(d as String).onStringVal
(d as Any).onAnyVal
(d as Any?).onNullableAnyVal
(d as Any).onDynamicVal
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!>
}
fun testReassignmentWithSafeCall(d: dynamic) {
<!VAL_REASSIGNMENT!>d?.onDynamicVal<!> = 1
d?.<!DEBUG_INFO_DYNAMIC!>onDynamicVal<!> = 1
}
fun testReassignmentWithStaticCalls(d: dynamic) {
<!VAL_REASSIGNMENT!>(d as String).onStringVal<!> = 1
<!VAL_REASSIGNMENT!>(d as Any).onAnyVal<!> = 1
<!VAL_REASSIGNMENT!>(d as Any?).onNullableAnyVal<!> = 1
<!VAL_REASSIGNMENT!>(d as Any).onDynamicVal<!> = 1
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!> = 1
}
val Any.onAnyVal: Int get() = 1
val Any?.onNullableAnyVal: Int get() = 1
val String.onStringVal: Int get() = 1
val dynamic.onDynamicVal: Int get() = 1
val <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.onDynamicVal: Int get() = 1
class C {
fun test(d: dynamic) {
@@ -22,6 +22,12 @@ public final var onNullableAnyVar: dynamic
public final var onStringVar: dynamic
public final fun <get-onStringVar>(): dynamic
public final fun <set-onStringVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var onDynamicVar: dynamic
public final fun <get-onDynamicVar>(): dynamic
public final fun <set-onDynamicVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var onDynamicVar: dynamic
public final fun <get-onDynamicVar>(): dynamic
public final fun <set-onDynamicVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberVar: dynamic
public final fun <get-memberVar>(): dynamic
public final fun <set-memberVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
@@ -20,19 +20,19 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onStringVar<!> = 1
d.onDynamicVar = 1
d.<!DEBUG_INFO_DYNAMIC!>onDynamicVar<!> = 1
d?.onDynamicVar = 1
d?.<!DEBUG_INFO_DYNAMIC!>onDynamicVar<!> = 1
(d as String).onStringVar
(d as Any).onAnyVar
(d as Any?).onNullableAnyVar
(d as Any).onDynamicVar
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!>
(d as String).onStringVar = 1
(d as Any).onAnyVar = 1
(d as Any?).onNullableAnyVar = 1
(d as Any).onDynamicVar = 1
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!> = 1
}
var Any.onAnyVar: Int
@@ -47,7 +47,7 @@ var String.onStringVar: Int
get() = 1
set(v) {}
var dynamic.onDynamicVar: Int
var <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.onDynamicVar: Int
get() = 1
set(v) {}
@@ -4,5 +4,7 @@ public final fun onAny(): dynamic
public final fun onAny(/*0*/ p0: dynamic): dynamic
public final fun onNullableAny(): dynamic
public final fun onString(): dynamic
public final fun onDynamic(): dynamic
public final fun onDynamic(): dynamic
public final fun member(): dynamic
public final fun memberExtension(): dynamic
@@ -13,19 +13,19 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onNullableAny<!>()
d.<!DEBUG_INFO_DYNAMIC!>onString<!>()
d.onDynamic()
d?.onDynamic()
d.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d?.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
(d as String).onString()
(d as Any).onAny()
(d as Any?).onNullableAny()
(d as Any).onDynamic()
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamic<!>()
}
fun Any.onAny() {}
fun Any?.onNullableAny() {}
fun String.onString() {}
fun dynamic.onDynamic() {}
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.onDynamic() {}
class C {
fun test(d: dynamic) {
@@ -0,0 +1,54 @@
public final fun onDynamic(): dynamic
public final fun onNullableDynamic(): dynamic
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final fun onDynamic(): dynamic
public final fun onNullableDynamic(): dynamic
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final fun onDynamic(): dynamic
public final fun onNullableDynamic(): dynamic
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var valOnDynamic: dynamic
public final fun <get-valOnDynamic>(): dynamic
public final fun <set-valOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var varOnDynamic: dynamic
public final fun <get-varOnDynamic>(): dynamic
public final fun <set-varOnDynamic>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberExtensionVar: dynamic
public final fun <get-memberExtensionVar>(): dynamic
public final fun <set-memberExtensionVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberExtensionVar: dynamic
public final fun <get-memberExtensionVar>(): dynamic
public final fun <set-memberExtensionVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberExtensionVal: dynamic
public final fun <get-memberExtensionVal>(): dynamic
public final fun <set-memberExtensionVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var memberExtensionVal: dynamic
public final fun <get-memberExtensionVal>(): dynamic
public final fun <set-memberExtensionVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
@@ -1,58 +1,58 @@
// !MARK_DYNAMIC_CALLS
fun test(d: dynamic) {
d.onDynamic()
d.onNullableDynamic()
d.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d.<!DEBUG_INFO_DYNAMIC!>onNullableDynamic<!>()
d.valOnDynamic
<!VAL_REASSIGNMENT!>d.valOnDynamic<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!>
d.<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!> = 1
d.varOnDynamic
d.varOnDynamic = 1
d.<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!>
d.<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!> = 1
}
fun dynamic.extTest() {
onDynamic()
onNullableDynamic()
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.extTest() {
<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
<!DEBUG_INFO_DYNAMIC!>onNullableDynamic<!>()
valOnDynamic
<!VAL_REASSIGNMENT!>valOnDynamic<!> = 1
<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!>
<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!> = 1
varOnDynamic
varOnDynamic = 1
<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!>
<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!> = 1
this.onDynamic()
this.onNullableDynamic()
this.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
this.<!DEBUG_INFO_DYNAMIC!>onNullableDynamic<!>()
this.valOnDynamic
this.valOnDynamic = 1
this.<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!>
this.<!DEBUG_INFO_DYNAMIC!>valOnDynamic<!> = 1
this.varOnDynamic
this.varOnDynamic = 1
this.<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!>
this.<!DEBUG_INFO_DYNAMIC!>varOnDynamic<!> = 1
}
fun dynamic.onDynamic() {}
fun dynamic<!REDUNDANT_NULLABLE!>?<!>.onNullableDynamic() {}
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.onDynamic() {}
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!REDUNDANT_NULLABLE!>?<!><!>.onNullableDynamic() {}
val dynamic.valOnDynamic: Int get() = 1
val <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.valOnDynamic: Int get() = 1
var dynamic.varOnDynamic: Int
var <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.varOnDynamic: Int
get() = 1
set(v) {}
class ForMemberExtensions {
fun test(d: dynamic) {
d.memberExtensionVar
d.memberExtensionVar = 1
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVar<!>
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVar<!> = 1
d.memberExtensionVal
<!VAL_REASSIGNMENT!>d.memberExtensionVal<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVal<!>
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVal<!> = 1
}
val dynamic.memberExtensionVal: Int get() = 1
var dynamic.memberExtensionVar: Int
val <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.memberExtensionVal: Int get() = 1
var <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.memberExtensionVar: Int
get() = 1
set(v) {}
}
@@ -1,4 +1,4 @@
fun dynamic.test() {
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.test() {
val v1 = foo()
v1.isDynamic() // to check that anything is resolvable
@@ -1 +1,3 @@
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
@@ -1,11 +1,11 @@
// !MARK_DYNAMIC_CALLS
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun dynamic.foo(s: String, a: Any) {}
fun dynamic.foo(s: Any, a: String) {}
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.foo(s: String, a: Any) {}
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.foo(s: Any, a: String) {}
fun test(d: dynamic) {
d.foo(1, "")
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>("", "")
d.<!DEBUG_INFO_DYNAMIC!>foo<!>(1, "")
d.<!DEBUG_INFO_DYNAMIC!>foo<!>("", "")
d.<!DEBUG_INFO_DYNAMIC!>foo<!>(1, 1)
}
@@ -1,7 +1,7 @@
// !MARK_DYNAMIC_CALLS
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun dynamic.test() {
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.test() {
<!DEBUG_INFO_DYNAMIC!>foo<!>()
<!DEBUG_INFO_DYNAMIC!>ext<!>()
@@ -57,7 +57,7 @@ class C {
val withInvoke = WithInvoke()
fun dynamic.test() {
fun <!DYNAMIC_RECEIVER_NOT_ALLOWED!>dynamic<!>.test() {
s()
<!DEBUG_INFO_DYNAMIC!>this<!>()
@@ -0,0 +1,7 @@
public final fun staticExtension(): dynamic
public final var staticProperty: dynamic
public final fun <get-staticProperty>(): dynamic
public final fun <set-staticProperty>(/*0*/ <set-?>: dynamic): kotlin.Unit
public final var staticParameter: dynamic
public final fun <get-staticParameter>(): dynamic
public final fun <set-staticParameter>(/*0*/ <set-?>: dynamic): kotlin.Unit
@@ -0,0 +1,12 @@
// !MARK_DYNAMIC_CALLS
fun Any?.staticExtension() = 1
val Any?.staticProperty get() = 2
fun test(d: dynamic, <!UNUSED_PARAMETER!>staticParameter<!>: Any?.() -> Unit) {
d.<!DEBUG_INFO_DYNAMIC!>staticExtension<!>()
d.<!DEBUG_INFO_DYNAMIC!>staticProperty<!>
d.<!DEBUG_INFO_DYNAMIC!>staticParameter<!>
}
@@ -0,0 +1,5 @@
package
public val kotlin.Any?.staticProperty: kotlin.Int
public fun test(/*0*/ d: dynamic, /*1*/ staticParameter: kotlin.Any?.() -> kotlin.Unit): kotlin.Unit
public fun kotlin.Any?.staticExtension(): kotlin.Int