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 9caf4aafbc0..9301bd9ac0b 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 @@ -22958,6 +22958,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithCharClass.kt"); } + @Test + @TestMetadata("specializedWithReifiedTypeParameter.kt") + public void testSpecializedWithReifiedTypeParameter() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt"); + } + + @Test + @TestMetadata("specializedWithString.kt") + public void testSpecializedWithString() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt"); + } + @Test @TestMetadata("voidReturnTypeAsGeneric.kt") public void testVoidReturnTypeAsGeneric() throws Exception { diff --git a/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt b/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt new file mode 100644 index 00000000000..47ac1e3bbef --- /dev/null +++ b/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt @@ -0,0 +1,26 @@ +// TARGET_BACKEND: JVM +// JVM_TARGET: 1.8 +// SAM_CONVERSIONS: INDY +// WITH_RUNTIME +// FULL_JDK + +// CHECK_BYTECODE_TEXT +// JVM_IR_TEMPLATES +// 1 java/lang/invoke/LambdaMetafactory + +// FILE: specializedWithReifiedTypeParameter.kt +class OK + +inline fun f(): T = + T::class.java.constructors.first().newInstance() as T + +fun foo2(g: GenericToAny): T = g.invoke() + +fun box(): String { + return foo2(::f)::class.simpleName!! +} + +// FILE: GenericToAny.java +public interface GenericToAny { + T invoke(); +} diff --git a/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt b/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt new file mode 100644 index 00000000000..7f8a3cf1cd7 --- /dev/null +++ b/compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt @@ -0,0 +1,17 @@ +// TARGET_BACKEND: JVM +// JVM_TARGET: 1.8 +// SAM_CONVERSIONS: INDY + +// CHECK_BYTECODE_TEXT +// JVM_IR_TEMPLATES +// 1 java/lang/invoke/LambdaMetafactory + +fun interface GenericToAny { + fun invoke(Inner: T): T +} + +fun foo2(t: T, g: GenericToAny): T = g.invoke(t) + +fun box(): String { + return foo2("OK") { it } +} \ 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 3b4e469b5fa..330c307656f 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 @@ -22820,6 +22820,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithCharClass.kt"); } + @Test + @TestMetadata("specializedWithReifiedTypeParameter.kt") + public void testSpecializedWithReifiedTypeParameter() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt"); + } + + @Test + @TestMetadata("specializedWithString.kt") + public void testSpecializedWithString() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt"); + } + @Test @TestMetadata("voidReturnTypeAsGeneric.kt") public void testVoidReturnTypeAsGeneric() throws Exception { 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 42412e10039..55c29f3957b 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 @@ -22958,6 +22958,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithCharClass.kt"); } + @Test + @TestMetadata("specializedWithReifiedTypeParameter.kt") + public void testSpecializedWithReifiedTypeParameter() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt"); + } + + @Test + @TestMetadata("specializedWithString.kt") + public void testSpecializedWithString() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt"); + } + @Test @TestMetadata("voidReturnTypeAsGeneric.kt") public void testVoidReturnTypeAsGeneric() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index d1886274a6c..2dcf893270c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -19122,6 +19122,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithCharClass.kt"); } + @TestMetadata("specializedWithReifiedTypeParameter.kt") + public void testSpecializedWithReifiedTypeParameter() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithReifiedTypeParameter.kt"); + } + + @TestMetadata("specializedWithString.kt") + public void testSpecializedWithString() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/specializedWithString.kt"); + } + @TestMetadata("voidReturnTypeAsGeneric.kt") public void testVoidReturnTypeAsGeneric() throws Exception { runTest("compiler/testData/codegen/box/invokedynamic/sam/specializedGenerics/voidReturnTypeAsGeneric.kt");