JVM_IR KT-45581 generate H_INVOKEINTERFACE for interface method handles
This commit is contained in:
+13
-1
@@ -143,7 +143,7 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("javaAnnotatestInferenceWithTypeVariableInsideCapturedType tionArrayValueDefault.kt")
|
||||
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
||||
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/annotations/javaAnnotationArrayValueDefault.kt");
|
||||
}
|
||||
@@ -20504,6 +20504,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("interfaceMemberRef.kt")
|
||||
public void testInterfaceMemberRef() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/interfaceMemberRef.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt45581.kt")
|
||||
public void testKt45581() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/kt45581.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localFunction1.kt")
|
||||
public void testLocalFunction1() throws Exception {
|
||||
|
||||
+2
@@ -111,6 +111,8 @@ object JvmInvokeDynamic : IntrinsicMethod() {
|
||||
Opcodes.H_NEWINVOKESPECIAL
|
||||
irFun.dispatchReceiverParameter == null ->
|
||||
Opcodes.H_INVOKESTATIC
|
||||
irParentClass.isJvmInterface ->
|
||||
Opcodes.H_INVOKEINTERFACE
|
||||
else ->
|
||||
Opcodes.H_INVOKEVIRTUAL
|
||||
}
|
||||
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
// FILE: interfaceMemberRef.kt
|
||||
interface IFoo {
|
||||
fun foo(): String
|
||||
}
|
||||
|
||||
class C(val v: String) : IFoo {
|
||||
override fun foo(): String = v
|
||||
}
|
||||
|
||||
fun box() = Sam(IFoo::foo).get(C("OK"))
|
||||
|
||||
// FILE: Sam.java
|
||||
public interface Sam {
|
||||
String get(IFoo c);
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_RUNTIME
|
||||
// JVM_TARGET: 1.8
|
||||
// SAM_CONVERSIONS: INDY
|
||||
// FULL_JDK
|
||||
// IGNORE_DEXING
|
||||
// ^ D8 fails with AssertionError, possible reason: only Kotlin output files are passed to D8
|
||||
// FILE: kt45581.kt
|
||||
|
||||
fun box(): String = J.bar(emptySet<String>()::contains)
|
||||
|
||||
// FILE: J.java
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class J {
|
||||
public static String bar(Predicate<String> predicate) {
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
+12
@@ -20504,6 +20504,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("interfaceMemberRef.kt")
|
||||
public void testInterfaceMemberRef() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/interfaceMemberRef.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt45581.kt")
|
||||
public void testKt45581() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/kt45581.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localFunction1.kt")
|
||||
public void testLocalFunction1() throws Exception {
|
||||
|
||||
+12
@@ -20504,6 +20504,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("interfaceMemberRef.kt")
|
||||
public void testInterfaceMemberRef() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/interfaceMemberRef.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt45581.kt")
|
||||
public void testKt45581() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/kt45581.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localFunction1.kt")
|
||||
public void testLocalFunction1() throws Exception {
|
||||
|
||||
+10
@@ -17179,6 +17179,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("interfaceMemberRef.kt")
|
||||
public void testInterfaceMemberRef() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/interfaceMemberRef.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt45581.kt")
|
||||
public void testKt45581() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/kt45581.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("localFunction1.kt")
|
||||
public void testLocalFunction1() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/localFunction1.kt");
|
||||
|
||||
Reference in New Issue
Block a user