From 68e2d0d245c4232eca6dbd62cb983459b29530c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Wed, 28 Oct 2020 18:00:44 +0100 Subject: [PATCH] JVM IR: Generate synthetic final implementation methods in SAM wrappers --- .../ir/FirBytecodeTextTestGenerated.java | 5 +++++ .../lower/SingleAbstractMethodLowering.kt | 3 ++- ...samWrapperSyntheticImplementationMethod.kt | 21 +++++++++++++++++++ .../codegen/BytecodeTextTestGenerated.java | 5 +++++ .../ir/IrBytecodeTextTestGenerated.java | 5 +++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBytecodeTextTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBytecodeTextTestGenerated.java index 8904d69198b..1ff67771358 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBytecodeTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBytecodeTextTestGenerated.java @@ -4353,6 +4353,11 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest { public void testSamWrapperSyntheticFlags() throws Exception { runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt"); } + + @TestMetadata("samWrapperSyntheticImplementationMethod.kt") + public void testSamWrapperSyntheticImplementationMethod() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt"); + } } @TestMetadata("compiler/testData/codegen/bytecodeText/statements") diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt index 7ff9ef0d343..026e0ccdbc9 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt @@ -209,7 +209,8 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) : name = superMethod.name returnType = superMethod.returnType visibility = superMethod.visibility - origin = subclass.origin + modality = Modality.FINAL + origin = IrDeclarationOrigin.SYNTHETIC_GENERATED_SAM_IMPLEMENTATION isSuspend = superMethod.isSuspend setSourceRange(createFor) }.apply { diff --git a/compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt b/compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt new file mode 100644 index 00000000000..a92f33d0ce5 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt @@ -0,0 +1,21 @@ +// FILE: J.java + +public class J { + public static void g(Runnable r) { + r.run(); + } +} + +// FILE: test.kt + +fun nonInlineFun() { + val f = {} + J.g(f) +} + +inline fun inlineFun() { + val f = {} + J.g(f) +} + +// 2 public final synthetic run\(\)V \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 45161e66415..155ac4ea16e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -4425,6 +4425,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { public void testSamWrapperSyntheticFlags() throws Exception { runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt"); } + + @TestMetadata("samWrapperSyntheticImplementationMethod.kt") + public void testSamWrapperSyntheticImplementationMethod() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.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 65d8047651a..8703c13bdf4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -4353,6 +4353,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { public void testSamWrapperSyntheticFlags() throws Exception { runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt"); } + + @TestMetadata("samWrapperSyntheticImplementationMethod.kt") + public void testSamWrapperSyntheticImplementationMethod() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticImplementationMethod.kt"); + } } @TestMetadata("compiler/testData/codegen/bytecodeText/statements")