diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt index 54b5e35aab0..79909b2a3d6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt @@ -805,6 +805,7 @@ class KotlinTypeMapper @JvmOverloads constructor( receiverTypeAndTypeParameters.receiverType } !isIrBackend && kind == OwnerKind.ERASED_INLINE_CLASS -> { + writeFormalTypeParameters(directMember.typeParameters, sw) (directMember.containingDeclaration as ClassDescriptor).defaultType } else -> { diff --git a/compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt b/compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt new file mode 100644 index 00000000000..6779b3fab34 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt @@ -0,0 +1,23 @@ +// TARGET_BACKEND: JVM + +// FILE: a.kt + +inline class IC(val v: Int) { + fun getT(): T? = null +} + +// FILE: UseIC.java + +public class UseIC { + private IC ic = null; + + public static String result() { + return "OK"; + } +} + +// FILE: test.kt + +fun box(): String { + return UseIC.result() +} diff --git a/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt b/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt new file mode 100644 index 00000000000..452dabd40c8 --- /dev/null +++ b/compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt @@ -0,0 +1,27 @@ +inline class SomeClass(val v: Int) { + companion object { + fun comp(s: SomeClass, t: T): T? = null + } + + fun getT(): T? = null + + fun getTK(t: T): K? = null + + val K.propK: K? get() = null +} + +// method: SomeClass::getT-impl +// jvm signature: (I)Ljava/lang/Object; +// generic signature: (I)TT; + +// method: SomeClass::getTK-impl +// jvm signature: (ILjava/lang/Object;)Ljava/lang/Object; +// generic signature: (ITT;)TK; + +// method: SomeClass::getPropK-impl +// jvm signature: (ILjava/lang/Object;)Ljava/lang/Object; +// generic signature: (ITK;)TK; + +// method: SomeClass$Companion::comp-Uh6wWds +// jvm signature: (ILjava/lang/Object;)Ljava/lang/Object; +// generic signature: (ITT;)TT; \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index e7c5a725180..f3ca63f83fa 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -12720,6 +12720,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); } + @TestMetadata("useOfInlineClassWithGenericMethodFromJava.kt") + public void testUseOfInlineClassWithGenericMethodFromJava() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt"); + } + @TestMetadata("useThisInsideInlineClass.kt") public void testUseThisInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/useThisInsideInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index dced11244da..f27cb0fa998 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12720,6 +12720,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); } + @TestMetadata("useOfInlineClassWithGenericMethodFromJava.kt") + public void testUseOfInlineClassWithGenericMethodFromJava() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt"); + } + @TestMetadata("useThisInsideInlineClass.kt") public void testUseThisInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/useThisInsideInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 4ce18bd7748..75c5e35e55a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11610,6 +11610,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); } + @TestMetadata("useOfInlineClassWithGenericMethodFromJava.kt") + public void testUseOfInlineClassWithGenericMethodFromJava() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/useOfInlineClassWithGenericMethodFromJava.kt"); + } + @TestMetadata("useThisInsideInlineClass.kt") public void testUseThisInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/useThisInsideInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteSignatureTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteSignatureTestGenerated.java index 0fc14de2d3d..6661d9fdb84 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteSignatureTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteSignatureTestGenerated.java @@ -542,6 +542,11 @@ public class IrWriteSignatureTestGenerated extends AbstractIrWriteSignatureTest runTest("compiler/testData/writeSignature/inlineClasses/genericInlineClassWithNotNullTypeParameter.kt"); } + @TestMetadata("genericMethodInsideClass.kt") + public void testGenericMethodInsideClass() throws Exception { + runTest("compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt"); + } + @TestMetadata("inlineClassAsGenericArgument.kt") public void testInlineClassAsGenericArgument() throws Exception { runTest("compiler/testData/writeSignature/inlineClasses/inlineClassAsGenericArgument.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java index cdd75e839f6..13381b4acb3 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java @@ -542,6 +542,11 @@ public class WriteSignatureTestGenerated extends AbstractWriteSignatureTest { runTest("compiler/testData/writeSignature/inlineClasses/genericInlineClassWithNotNullTypeParameter.kt"); } + @TestMetadata("genericMethodInsideClass.kt") + public void testGenericMethodInsideClass() throws Exception { + runTest("compiler/testData/writeSignature/inlineClasses/genericMethodInsideClass.kt"); + } + @TestMetadata("inlineClassAsGenericArgument.kt") public void testInlineClassAsGenericArgument() throws Exception { runTest("compiler/testData/writeSignature/inlineClasses/inlineClassAsGenericArgument.kt");