diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt index 786d67dd08a..10b77a303ae 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt @@ -379,18 +379,21 @@ fun collectVisibleTypeParameters(scopeOwner: IrTypeParametersContainer): Set genericSam(f: () -> T): T = J.g(f) + +// FILE: J.java +public class J { + static T g(Sam s) { + return s.get(); + } +} + +// FILE: Sam.java +public interface Sam { + T get(); +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface.txt b/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface.txt new file mode 100644 index 00000000000..95f7782207e --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface.txt @@ -0,0 +1,13 @@ +@kotlin.Metadata +final class SamGenericSuperinterfaceKt$sam$Sam$0 { + // source: 'samGenericSuperinterface.kt' + method (p0: kotlin.jvm.functions.Function0): void + public synthetic final method get(): java.lang.Object + private synthetic final field function: kotlin.jvm.functions.Function0 +} + +@kotlin.Metadata +public final class SamGenericSuperinterfaceKt { + // source: 'samGenericSuperinterface.kt' + public final static <(Lkotlin/jvm/functions/Function0<+TT;>;)TT;> method genericSam(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Object +} diff --git a/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface_ir.txt b/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface_ir.txt new file mode 100644 index 00000000000..96e17793796 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/samGenericSuperinterface_ir.txt @@ -0,0 +1,15 @@ +@kotlin.Metadata +final class SamGenericSuperinterfaceKt$sam$Sam$0 { + // source: 'samGenericSuperinterface.kt' + method (@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): void + public synthetic final method get(): java.lang.Object + private synthetic final field function: kotlin.jvm.functions.Function0 + final inner class SamGenericSuperinterfaceKt$sam$Sam$0 +} + +@kotlin.Metadata +public final class SamGenericSuperinterfaceKt { + // source: 'samGenericSuperinterface.kt' + public final static <(Lkotlin/jvm/functions/Function0<+TT;>;)TT;> method genericSam(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Object + final inner class SamGenericSuperinterfaceKt$sam$Sam$0 +} diff --git a/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.kt b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.kt new file mode 100644 index 00000000000..5d2290fba45 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.kt @@ -0,0 +1,16 @@ +// WITH_SIGNATURES +// FILE: samGenericSuperinterface.kt + +fun specializedSam(f: () -> String) = J.g(f) + +// FILE: J.java +public class J { + static T g(Sam s) { + return s.get(); + } +} + +// FILE: Sam.java +public interface Sam { + T get(); +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.txt b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.txt new file mode 100644 index 00000000000..da97bd5cec5 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.txt @@ -0,0 +1,13 @@ +@kotlin.Metadata +final class SamGenericSuperinterfaceKt$sam$Sam$0 { + // source: 'samGenericSuperinterface.kt' + method (p0: kotlin.jvm.functions.Function0): void + public synthetic final method get(): java.lang.Object + private synthetic final field function: kotlin.jvm.functions.Function0 +} + +@kotlin.Metadata +public final class SamGenericSuperinterfaceKt { + // source: 'samGenericSuperinterface.kt' + public final static <(Lkotlin/jvm/functions/Function0;)Ljava/lang/String;> method specializedSam(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.String +} diff --git a/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface_ir.txt b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface_ir.txt new file mode 100644 index 00000000000..25f44905b2a --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface_ir.txt @@ -0,0 +1,15 @@ +@kotlin.Metadata +final class SamGenericSuperinterfaceKt$sam$Sam$0 { + // source: 'samGenericSuperinterface.kt' + method (@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): void + public synthetic final method get(): java.lang.Object + private synthetic final field function: kotlin.jvm.functions.Function0 + final inner class SamGenericSuperinterfaceKt$sam$Sam$0 +} + +@kotlin.Metadata +public final class SamGenericSuperinterfaceKt { + // source: 'samGenericSuperinterface.kt' + public final static <(Lkotlin/jvm/functions/Function0;)Ljava/lang/String;> method specializedSam(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.String + final inner class SamGenericSuperinterfaceKt$sam$Sam$0 +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index c421d32d645..5897a7b6fbe 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -214,6 +214,16 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/samAdapterAndInlinedOne.kt"); } + @TestMetadata("samGenericSuperinterface.kt") + public void testSamGenericSuperinterface() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/samGenericSuperinterface.kt"); + } + + @TestMetadata("samSpecializedGenericSuperinterface.kt") + public void testSamSpecializedGenericSuperinterface() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.kt"); + } + @TestMetadata("varargsBridge.kt") public void testVarargsBridge() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/varargsBridge.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index 98ed33c98c4..139e31166d6 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -214,6 +214,16 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/samAdapterAndInlinedOne.kt"); } + @TestMetadata("samGenericSuperinterface.kt") + public void testSamGenericSuperinterface() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/samGenericSuperinterface.kt"); + } + + @TestMetadata("samSpecializedGenericSuperinterface.kt") + public void testSamSpecializedGenericSuperinterface() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/samSpecializedGenericSuperinterface.kt"); + } + @TestMetadata("varargsBridge.kt") public void testVarargsBridge() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/varargsBridge.kt");