Forbid spread operator in signature-polymorphic calls

#KT-35226 Fixed
This commit is contained in:
Alexander Udalov
2020-01-08 18:37:39 +01:00
parent b6feec4115
commit 5321a6af33
17 changed files with 177 additions and 11 deletions
@@ -0,0 +1,11 @@
// !LANGUAGE: +PolymorphicSignature +ProhibitSpreadOnSignaturePolymorphicCall
// FULL_JDK
import java.lang.invoke.MethodHandle
fun test(mh: MethodHandle) {
mh.invokeExact("1", "2")
mh.invokeExact(*emptyArray(), "X")
mh.invokeExact(*arrayOf("A", "B"), "C", *arrayOf("D", "E"))
mh.invoke(*arrayOf("A"))
}
@@ -0,0 +1,11 @@
// !LANGUAGE: +PolymorphicSignature +ProhibitSpreadOnSignaturePolymorphicCall
// FULL_JDK
import java.lang.invoke.MethodHandle
fun test(mh: MethodHandle) {
mh.invokeExact("1", "2")
mh.invokeExact(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL_ERROR!>*<!>emptyArray(), "X")
mh.invokeExact(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL_ERROR!>*<!>arrayOf("A", "B"), "C", <!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL_ERROR!>*<!>arrayOf("D", "E"))
mh.invoke(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL_ERROR!>*<!>arrayOf("A"))
}
@@ -0,0 +1,3 @@
package
public fun test(/*0*/ mh: java.lang.invoke.MethodHandle): kotlin.Unit
@@ -0,0 +1,11 @@
// !LANGUAGE: +PolymorphicSignature -ProhibitSpreadOnSignaturePolymorphicCall
// FULL_JDK
import java.lang.invoke.MethodHandle
fun test(mh: MethodHandle) {
mh.invokeExact("1", "2")
mh.<!INAPPLICABLE_CANDIDATE!>invokeExact<!>(*emptyArray(), "X")
mh.<!INAPPLICABLE_CANDIDATE!>invokeExact<!>(*arrayOf("A", "B"), "C", *arrayOf("D", "E"))
mh.invoke(*arrayOf("A"))
}
@@ -0,0 +1,11 @@
// !LANGUAGE: +PolymorphicSignature -ProhibitSpreadOnSignaturePolymorphicCall
// FULL_JDK
import java.lang.invoke.MethodHandle
fun test(mh: MethodHandle) {
mh.invokeExact("1", "2")
mh.invokeExact(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL!>*<!>emptyArray(), "X")
mh.invokeExact(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL!>*<!>arrayOf("A", "B"), "C", <!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL!>*<!>arrayOf("D", "E"))
mh.invoke(<!SPREAD_ON_SIGNATURE_POLYMORPHIC_CALL!>*<!>arrayOf("A"))
}
@@ -0,0 +1,3 @@
package
public fun test(/*0*/ mh: java.lang.invoke.MethodHandle): kotlin.Unit