[NI] Support implicit invoke calls on parenthesized receivers
This commit is contained in:
@@ -37,8 +37,8 @@ fun main(args : Array<String>) {
|
||||
foo2()({})
|
||||
foo2()<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
(foo2()){}
|
||||
(foo2()){<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> }
|
||||
foo2()({<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> })
|
||||
(foo2())<!NI;TYPE_MISMATCH!>{<!OI;CANNOT_INFER_PARAMETER_TYPE, OI;EXPECTED_PARAMETERS_NUMBER_MISMATCH, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> }<!>
|
||||
foo2()(<!NI;TYPE_MISMATCH!>{<!OI;CANNOT_INFER_PARAMETER_TYPE, OI;EXPECTED_PARAMETERS_NUMBER_MISMATCH, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> }<!>)
|
||||
|
||||
val a = fooT1(1)()
|
||||
checkSubtype<Int>(a)
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ fun test4() {
|
||||
// should be an error on receiver, shouldn't be thrown away
|
||||
|
||||
fun test5() {
|
||||
<!TYPE_MISMATCH!>1<!>.(fun String.()=1)()
|
||||
<!OI;TYPE_MISMATCH!>1<!>.<!NI;FUNCTION_EXPECTED!>(fun String.()=1)<!>()
|
||||
}
|
||||
|
||||
fun <R: Any> R?.sure() : R = this!!
|
||||
|
||||
+1
-1
@@ -33,4 +33,4 @@ fun bar() {
|
||||
Inner()
|
||||
Inner(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -10,5 +10,5 @@ fun foo(s: String, ai: A<Int>) {
|
||||
|
||||
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>s<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>ai<!>)
|
||||
|
||||
<!TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>""<!>(ai)
|
||||
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>""<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>ai<!>)
|
||||
}
|
||||
|
||||
Vendored
+7
-5
@@ -1,15 +1,17 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
fun test1() {
|
||||
<!TYPE_MISMATCH!>1<!>. (fun String.(i: Int) = i )(1)
|
||||
<!TYPE_MISMATCH!>1<!>.(label@ fun String.(i: Int) = i )(1)
|
||||
<!OI;TYPE_MISMATCH!>1<!>. <!NI;FUNCTION_EXPECTED!>(fun String.(i: Int) = i )<!>(1)
|
||||
<!OI;TYPE_MISMATCH!>1<!>.<!NI;FUNCTION_EXPECTED!>(label@ fun String.(i: Int) = i )<!>(1)
|
||||
}
|
||||
|
||||
fun test2(f: String.(Int) -> Unit) {
|
||||
<!TYPE_MISMATCH!>11<!>.(f)(1)
|
||||
<!TYPE_MISMATCH!>11<!>.(f)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
<!OI;TYPE_MISMATCH!>11<!>.<!NI;FUNCTION_EXPECTED!>(f)<!>(1)
|
||||
<!OI;TYPE_MISMATCH!>11<!>.<!NI;FUNCTION_EXPECTED!>(f)<!>(<!OI;NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
fun test3() {
|
||||
fun foo(): String.(Int) -> Unit = {}
|
||||
|
||||
<!TYPE_MISMATCH!>1<!>.(foo())(1)
|
||||
<!OI;TYPE_MISMATCH!>1<!>.<!NI;FUNCTION_EXPECTED!>(foo())<!>(1)
|
||||
}
|
||||
@@ -9,11 +9,11 @@ fun test(a: A) {
|
||||
}
|
||||
"".<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>()
|
||||
a<!NI;UNSAFE_CALL!>.<!><!OI;UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>("")
|
||||
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>("")
|
||||
<!NI;UNSAFE_CALL, OI;UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>("")
|
||||
|
||||
with("") {
|
||||
a<!NI;UNSAFE_CALL!>.<!><!OI;UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>()
|
||||
<!NI;UNSAFE_CALL, OI;UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>()
|
||||
if (a.x != null) {
|
||||
a<!NI;UNSAFE_CALL!>.<!><!OI;UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>(<!NO_VALUE_FOR_PARAMETER!>)<!> // todo
|
||||
<!DEBUG_INFO_SMARTCAST!>(a.x)<!>()
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
open class A {
|
||||
operator fun invoke() {}
|
||||
operator fun invoke(f: () -> Unit) {}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
fun bar() {
|
||||
<!SUPER_IS_NOT_AN_EXPRESSION!>super<!>()
|
||||
(<!SUPER_IS_NOT_AN_EXPRESSION!>super<!>)()
|
||||
<!SUPER_IS_NOT_AN_EXPRESSION!>super<!> {}
|
||||
(<!SUPER_IS_NOT_AN_EXPRESSION!>super<!>) {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package
|
||||
|
||||
public open class A {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final operator fun invoke(): kotlin.Unit
|
||||
public final operator fun invoke(/*0*/ f: () -> kotlin.Unit): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class B : A {
|
||||
public constructor B()
|
||||
public final fun bar(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final override /*1*/ /*fake_override*/ fun invoke(): kotlin.Unit
|
||||
public final override /*1*/ /*fake_override*/ fun invoke(/*0*/ f: () -> kotlin.Unit): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user