JVM IR: Generate SAM wrapper fields as synthetic final

This commit is contained in:
Steven Schäfer
2020-10-28 17:22:39 +01:00
committed by Alexander Udalov
parent ec1d42e92b
commit 999151abac
6 changed files with 34 additions and 1 deletions
@@ -4339,6 +4339,11 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt");
}
@TestMetadata("samWrapperPrivateFinalSyntheticField.kt")
public void testSamWrapperPrivateFinalSyntheticField() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperPrivateFinalSyntheticField.kt");
}
@TestMetadata("samWrapperSyntheticFlags.kt")
public void testSamWrapperSyntheticFlags() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt");
@@ -177,8 +177,9 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) :
val field = subclass.addField {
name = Name.identifier(FUNCTION_FIELD_NAME)
type = wrappedFunctionType
origin = subclass.origin
origin = IrDeclarationOrigin.SYNTHETIC_GENERATED_SAM_IMPLEMENTATION
visibility = DescriptorVisibilities.PRIVATE
isFinal = true
setSourceRange(createFor)
}
@@ -69,6 +69,7 @@ interface IrDeclarationOrigin {
object ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION : IrDeclarationOriginImpl("ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION")
object GENERATED_SAM_IMPLEMENTATION : IrDeclarationOriginImpl("GENERATED_SAM_IMPLEMENTATION")
object SYNTHETIC_GENERATED_SAM_IMPLEMENTATION : IrDeclarationOriginImpl("SYNTHETIC_GENERATED_SAM_IMPLEMENTATION", isSynthetic = true)
val isSynthetic: Boolean get() = false
}
@@ -0,0 +1,16 @@
// FILE: J.java
public class J {
public static void g(Runnable r) {
r.run();
}
}
// FILE: test.kt
fun f() {
val r: () -> Unit = {}
J.g(r)
}
// 1 private final synthetic Lkotlin/jvm/functions/Function0; function
@@ -4411,6 +4411,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt");
}
@TestMetadata("samWrapperPrivateFinalSyntheticField.kt")
public void testSamWrapperPrivateFinalSyntheticField() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperPrivateFinalSyntheticField.kt");
}
@TestMetadata("samWrapperSyntheticFlags.kt")
public void testSamWrapperSyntheticFlags() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt");
@@ -4339,6 +4339,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperOfReference.kt");
}
@TestMetadata("samWrapperPrivateFinalSyntheticField.kt")
public void testSamWrapperPrivateFinalSyntheticField() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperPrivateFinalSyntheticField.kt");
}
@TestMetadata("samWrapperSyntheticFlags.kt")
public void testSamWrapperSyntheticFlags() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/sam/samWrapperSyntheticFlags.kt");