diff --git a/compiler/testData/codegen/bytecodeText/sam/samWrapperOfLambda.kt b/compiler/testData/codegen/bytecodeText/sam/samWrapperOfLambda.kt new file mode 100644 index 00000000000..f091753e2a0 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/sam/samWrapperOfLambda.kt @@ -0,0 +1,16 @@ +// FILE: JFoo.java + +public class JFoo { + public static void foo(Runnable f) { + f.run(); + } +} + +// FILE: Test.kt +fun test() { + JFoo.foo({}) +} + +// Lambda inlined into run(), no wrapper class generated: +// 1 NEW +// 0 INVOKEINTERFACE diff --git a/compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt b/compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt new file mode 100644 index 00000000000..b0e5071ab8c --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt @@ -0,0 +1,23 @@ +// This optimization is only done by the JVM_IR backend. +// IGNORE_BACKEND: JVM +// FILE: JFoo.java + +public class JFoo { + public static void foo(Runnable f) { + f.run(); + } +} + +// FILE: Test.kt +class A { + fun f() {} +} + +fun test() { + JFoo.foo(A()::f) +} + +// Referenced function called from run(), no wrapper class generated: +// 1 NEW A +// 2 NEW +// 0 INVOKEINTERFACE diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 0e7dc1d0bad..907e584f0e0 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -3264,6 +3264,16 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { public void testSamWrapperForNullableInitialization() throws Exception { runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperForNullableInitialization.kt"); } + + @TestMetadata("samWrapperOfLambda.kt") + public void testSamWrapperOfLambda() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfLambda.kt"); + } + + @TestMetadata("samWrapperOfReference.kt") + public void testSamWrapperOfReference() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt"); + } } @TestMetadata("compiler/testData/codegen/bytecodeText/statements") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 0aa2ef539e9..8ffe6476b17 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -3274,6 +3274,16 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { public void testSamWrapperForNullableInitialization() throws Exception { runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperForNullableInitialization.kt"); } + + @TestMetadata("samWrapperOfLambda.kt") + public void testSamWrapperOfLambda() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfLambda.kt"); + } + + @TestMetadata("samWrapperOfReference.kt") + public void testSamWrapperOfReference() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt"); + } } @TestMetadata("compiler/testData/codegen/bytecodeText/statements")