Change Signature: Support implicit calls of 'invoke' and 'get'

Also drop 'operator' keyword when necessary

 #KT-22718 Fixed
This commit is contained in:
Alexey Sedunov
2018-02-06 21:17:32 +03:00
parent e38d5395df
commit fddfbf225f
35 changed files with 437 additions and 32 deletions
@@ -0,0 +1,9 @@
class A {
operator fun get(s: String, i: Int, b: Boolean) {}
}
fun usage(a: A) {
a["", 42, false]
A()["", 42, false]
a.get("", 42, false)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,3 @@
Explicit receiver is already present in call element: A()[&quot;&quot;, 42]
Explicit receiver is already present in call element: a.get(&quot;&quot;, 42)
Explicit receiver is already present in call element: a[&quot;&quot;, 42]
@@ -0,0 +1,9 @@
class A
fun get(a: A, s: String, i: Int) {}
fun usage(a: A) {
get(a, "", 42)
get(A(), "", 42)
get(a, "", 42)
}
@@ -0,0 +1,9 @@
class A
operator fun A.<caret>get(s: String, i: Int) {}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun get(i: Int) {}
}
fun usage(a: A) {
a[42]
A()[42]
a.get(42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
fun foo(s: String, i: Int) {}
}
fun usage(a: A) {
a.foo("", 42)
A().foo("", 42)
a.foo("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun get(i: Int, s: String) {}
}
fun usage(a: A) {
a[42, ""]
A()[42, ""]
a.get(42, "")
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun invoke(s: String, i: Int, b: Boolean) {}
}
fun usage(a: A) {
a("", 42, false)
A()("", 42, false)
a.invoke("", 42, false)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,3 @@
Explicit receiver is already present in call element: A()(&quot;&quot;, 42)
Explicit receiver is already present in call element: a(&quot;&quot;, 42)
Explicit receiver is already present in call element: a.invoke(&quot;&quot;, 42)
@@ -0,0 +1,9 @@
class A
fun invoke(a: A, s: String, i: Int) {}
fun usage(a: A) {
invoke(a, "", 42)
invoke(A(), "", 42)
invoke(a, "", 42)
}
@@ -0,0 +1,9 @@
class A
operator fun A.<caret>invoke(s: String, i: Int) {}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun invoke(i: Int) {}
}
fun usage(a: A) {
a(42)
A()(42)
a.invoke(42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
fun foo(s: String, i: Int) {}
}
fun usage(a: A) {
a.foo("", 42)
A().foo("", 42)
a.foo("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun get(s: String, i: Int) {}
}
fun usage(a: A) {
a["", 42]
A()["", 42]
a.get("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}
@@ -0,0 +1,9 @@
class A {
operator fun invoke(i: Int, s: String) {}
}
fun usage(a: A) {
a(42, "")
A()(42, "")
a.invoke(42, "")
}
@@ -0,0 +1,9 @@
class A {
operator fun <caret>invoke(s: String, i: Int) {}
}
fun usage(a: A) {
a("", 42)
A()("", 42)
a.invoke("", 42)
}