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 1c585a9f21d..3c976bba8cf 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 @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection +import org.jetbrains.kotlin.ir.types.impl.originalKotlinType import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.load.java.JavaVisibilities @@ -53,6 +54,7 @@ fun IrType.eraseTypeParameters() = when (this) { is IrSimpleType -> when (val owner = classifier.owner) { is IrClass -> IrSimpleTypeImpl( + originalKotlinType, classifier, hasQuestionMark, arguments.map { it.eraseTypeParameters() }, @@ -72,7 +74,7 @@ fun IrType.eraseTypeParameters() = when (this) { else -> error("Unknown IrType kind: $this") } -fun IrTypeArgument.eraseTypeParameters(): IrTypeArgument = when (this) { +private fun IrTypeArgument.eraseTypeParameters(): IrTypeArgument = when (this) { is IrStarProjection -> this is IrTypeProjection -> makeTypeProjection(type.eraseTypeParameters(), variance) else -> error("Unknown IrTypeArgument kind: $this") diff --git a/compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt b/compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt new file mode 100644 index 00000000000..0ce9af256f8 --- /dev/null +++ b/compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt @@ -0,0 +1,16 @@ +// TARGET_BACKEND: JVM + +// FILE: E.java + +public interface E { + @org.jetbrains.annotations.NotNull + Integer getId(); +} + +// FILE: box.kt + +class EImpl : E { + override fun getId(): Int = 314 +} + +fun box(): String = if (EImpl().getId() == 314) "OK" else "Fail" diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 188e5653a44..6f0b2a88269 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -28169,6 +28169,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/typeMapping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @TestMetadata("enhancedPrimitiveInReturnType.kt") + public void testEnhancedPrimitiveInReturnType() throws Exception { + runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt"); + } + @TestMetadata("enhancedPrimitives.kt") public void testEnhancedPrimitives() throws Exception { runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 75f7460941b..492dea0484d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -26986,6 +26986,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/typeMapping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @TestMetadata("enhancedPrimitiveInReturnType.kt") + public void testEnhancedPrimitiveInReturnType() throws Exception { + runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt"); + } + @TestMetadata("enhancedPrimitives.kt") public void testEnhancedPrimitives() throws Exception { runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 29868a5a78c..8416da69d99 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -26678,6 +26678,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/typeMapping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @TestMetadata("enhancedPrimitiveInReturnType.kt") + public void testEnhancedPrimitiveInReturnType() throws Exception { + runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt"); + } + @TestMetadata("enhancedPrimitives.kt") public void testEnhancedPrimitives() throws Exception { runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 42063f0bfb9..6988fbcaa11 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -26678,6 +26678,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/typeMapping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @TestMetadata("enhancedPrimitiveInReturnType.kt") + public void testEnhancedPrimitiveInReturnType() throws Exception { + runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitiveInReturnType.kt"); + } + @TestMetadata("enhancedPrimitives.kt") public void testEnhancedPrimitives() throws Exception { runTest("compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt");