JVM_IR KT-46160 don't use LambdaMetafactory for mutifile class members
This commit is contained in:
committed by
TeamCityServer
parent
1dfc3c0520
commit
46d5e974df
+6
@@ -20878,6 +20878,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("multifileClassMemberFromStdlib.kt")
|
||||||
|
public void testMultifileClassMemberFromStdlib() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/multifileClassMemberFromStdlib.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nonTrivialReceiver.kt")
|
@TestMetadata("nonTrivialReceiver.kt")
|
||||||
public void testNonTrivialReceiver() throws Exception {
|
public void testNonTrivialReceiver() throws Exception {
|
||||||
|
|||||||
+8
@@ -78,6 +78,14 @@ internal class LambdaMetafactoryArgumentsBuilder(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val implFunParent = implFun.parent
|
||||||
|
if (implFunParent is IrClass && implFunParent.origin == IrDeclarationOrigin.JVM_MULTIFILE_CLASS) {
|
||||||
|
// LambdaMetafactory treats multifile class part members as non-accessible,
|
||||||
|
// even if the member is referenced via facade,
|
||||||
|
// because corresponding part class is non-accessible
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
// Can't use JDK LambdaMetafactory for annotated lambdas.
|
// Can't use JDK LambdaMetafactory for annotated lambdas.
|
||||||
// JDK LambdaMetafactory doesn't copy annotations from implementation method to an instance method in a
|
// JDK LambdaMetafactory doesn't copy annotations from implementation method to an instance method in a
|
||||||
// corresponding synthetic class, which doesn't look like a binary compatible change.
|
// corresponding synthetic class, which doesn't look like a binary compatible change.
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
// TARGET_BACKEND: JVM
|
||||||
|
// JVM_TARGET: 1.8
|
||||||
|
// SAM_CONVERSIONS: INDY
|
||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
// CHECK_BYTECODE_TEXT
|
||||||
|
// JVM_IR_TEMPLATES
|
||||||
|
// 0 java/lang/invoke/LambdaMetafactory
|
||||||
|
|
||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
|
// ^ OVERLOAD_RESOLUTION_AMBIGUITY: Overload resolution ambiguity between candidates: [kotlin/collections/plus, kotlin/collections/plus]
|
||||||
|
|
||||||
|
// FILE: multifileClassMemberFromStdlib.kt
|
||||||
|
|
||||||
|
fun test(a: List<String>, b: List<String>, bf: BF) =
|
||||||
|
bf.apply(a, b)
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val ss = test(listOf("O"), listOf("K"), List<String>::plus)
|
||||||
|
return ss[0] + ss[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: BF.java
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public interface BF {
|
||||||
|
List<String> apply(List<String> a, List<String> b);
|
||||||
|
}
|
||||||
+6
@@ -20854,6 +20854,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("multifileClassMemberFromStdlib.kt")
|
||||||
|
public void testMultifileClassMemberFromStdlib() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/multifileClassMemberFromStdlib.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nonTrivialReceiver.kt")
|
@TestMetadata("nonTrivialReceiver.kt")
|
||||||
public void testNonTrivialReceiver() throws Exception {
|
public void testNonTrivialReceiver() throws Exception {
|
||||||
|
|||||||
+6
@@ -20878,6 +20878,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("multifileClassMemberFromStdlib.kt")
|
||||||
|
public void testMultifileClassMemberFromStdlib() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/multifileClassMemberFromStdlib.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nonTrivialReceiver.kt")
|
@TestMetadata("nonTrivialReceiver.kt")
|
||||||
public void testNonTrivialReceiver() throws Exception {
|
public void testNonTrivialReceiver() throws Exception {
|
||||||
|
|||||||
+5
@@ -17448,6 +17448,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/memberRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("multifileClassMemberFromStdlib.kt")
|
||||||
|
public void testMultifileClassMemberFromStdlib() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/multifileClassMemberFromStdlib.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("nonTrivialReceiver.kt")
|
@TestMetadata("nonTrivialReceiver.kt")
|
||||||
public void testNonTrivialReceiver() throws Exception {
|
public void testNonTrivialReceiver() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/nonTrivialReceiver.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/nonTrivialReceiver.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user