diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index b56d0ce1e47..f1458bb206a 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -18648,6 +18648,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT public void testArgumentResult() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + + @Test + @TestMetadata("javaSam.kt") + public void testJavaSam() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt"); + } } @Nested diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 53f15311364..2e8d9795df1 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -661,6 +661,9 @@ class ExpressionCodegen( } || irFunction.parentAsClass.let { it.origin == JvmLoweredDeclarationOrigin.LAMBDA_IMPL && !it.isSamAdapter() } if (!genericOrAnyOverride) return + // Result parameter of SAM-wrapper to Java SAM is already unboxed in visitGetValue, do not unbox it anymore + if (irFunction.parentAsClass.superTypes.any { it.getClass()?.isFromJava() == true }) return + StackValue.unboxInlineClass(OBJECT_TYPE, arg.type.erasedUpperBound.defaultType.toIrBasedKotlinType(), mv) } diff --git a/compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt b/compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt new file mode 100644 index 00000000000..56030b4770b --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt @@ -0,0 +1,26 @@ +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// FULL_RUNTIME + +// FILE: ResultHandler.java + +import kotlin.Result; + +@FunctionalInterface +public interface ResultHandler { + void onResult(Result result); +} + +// FILE: test.kt + +fun doSmth(resultHandler: ResultHandler) { + resultHandler.onResult(Result.success(true)) +} + +fun box(): String { + var res = "FAIL" + doSmth { result -> + res = if (result.isSuccess) "OK" else "FAIL 1" + } + return res +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 6faf50924d5..610453e312b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -18648,6 +18648,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { public void testArgumentResult() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + + @Test + @TestMetadata("javaSam.kt") + public void testJavaSam() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt"); + } } @Nested diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 30e678a0990..c5af89fd20a 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -18648,6 +18648,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes public void testArgumentResult() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + + @Test + @TestMetadata("javaSam.kt") + public void testJavaSam() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt"); + } } @Nested diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index f93eb691f6b..1fe0dbf778e 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15508,6 +15508,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class FunInterface extends AbstractLightAnalysisModeTest { + @TestMetadata("argumentResult.kt") + public void ignoreArgumentResult() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); + } + + @TestMetadata("javaSam.kt") + public void ignoreJavaSam() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSam.kt"); + } + private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); } @@ -15520,11 +15530,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes public void testArgumentIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentIC.kt"); } - - @TestMetadata("argumentResult.kt") - public void testArgumentResult() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); - } } @TestMetadata("compiler/testData/codegen/box/inlineClasses/functionNameMangling")