Files
kotlin/compiler/testData/codegen/box/javaInterop/notNullAssertions/functionWithBigArity.kt
Alexander Udalov dcbb8045bd Disallow function types with big arity on JVM if LV < 1.3 or API < 1.3
The implementation is a bit obscure because this worked on JS since
Kotlin 1.0 and we should not break that; however, on JVM, a diagnostic
will be reported with old language/API version

 #KT-25241 Fixed
2018-07-16 10:41:27 +02:00

57 lines
2.0 KiB
Kotlin
Vendored

// !LANGUAGE: +FunctionTypesWithBigArity
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FILE: Test.java
// import kotlin.jvm.functions.Arity;
import kotlin.jvm.functions.FunctionN;
import java.util.Arrays;
public class Test {
public static final int N = 30;
// TODO: uncomment arity as soon as Arity is introduced
public static void test(/* @Arity(N) */ FunctionN<Object> f) {
Object[] args = new Object[N];
Object o = new Object();
Arrays.fill(args, o);
for (int i = 0; i < N; i++) {
args[i] = null;
try {
f.invoke(args);
} catch (IllegalArgumentException e) {
// OK
continue;
} catch (Throwable e) {
throw new AssertionError(
"Incorrect exception (IllegalArgumentException expected): " + e.getClass().getName() + ", parameter index = " + i,
e
);
} finally {
args[i] = o;
}
throw new AssertionError("IllegalArgumentException expected, but nothing was thrown, parameter index = " + i);
}
}
}
// FILE: box.kt
fun f(
p01: Any, p02: Any, p03: Any, p04: Any, p05: Any, p06: Any, p07: Any, p08: Any, p09: Any, p10: Any,
p11: Any, p12: Any, p13: Any, p14: Any, p15: Any, p16: Any, p17: Any, p18: Any, p19: Any, p20: Any,
p21: Any, p22: Any, p23: Any, p24: Any, p25: Any, p26: Any, p27: Any, p28: Any, p29: Any, p30: Any
): Any = Any()
fun Any.g(
p02: Any, p03: Any, p04: Any, p05: Any, p06: Any, p07: Any, p08: Any, p09: Any, p10: Any,
p11: Any, p12: Any, p13: Any, p14: Any, p15: Any, p16: Any, p17: Any, p18: Any, p19: Any, p20: Any,
p21: Any, p22: Any, p23: Any, p24: Any, p25: Any, p26: Any, p27: Any, p28: Any, p29: Any, p30: Any
): Any = Any()
fun box(): String {
Test.test(::f as kotlin.jvm.functions.FunctionN<Any>)
Test.test(Any::g as kotlin.jvm.functions.FunctionN<Any>)
return "OK"
}