From d1049e555319cfef6e89dd68f0bbebff29a370ca Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Wed, 24 Jan 2018 15:19:43 +0300 Subject: [PATCH] Refine type mapping for nullable inline class types --- .../inlineClasses/nullableInlineClassType.kt | 30 +++++++++++++++++++ .../compiler/WriteSignatureTestGenerated.java | 6 ++++ .../load/kotlin/typeSignatureMapping.kt | 8 ++++- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/writeSignature/inlineClasses/nullableInlineClassType.kt diff --git a/compiler/testData/writeSignature/inlineClasses/nullableInlineClassType.kt b/compiler/testData/writeSignature/inlineClasses/nullableInlineClassType.kt new file mode 100644 index 00000000000..d2d06c1814c --- /dev/null +++ b/compiler/testData/writeSignature/inlineClasses/nullableInlineClassType.kt @@ -0,0 +1,30 @@ +// !LANGUAGE: +InlineClasses + +inline class InlinePrimitive(val x: Int) +inline class InlineReference(val y: String) +inline class InlineNullablePrimitive(val x: Int?) +inline class InlineNullableReference(val y: String?) + +object Test { + fun withPrimitiveAsNullable(a: InlinePrimitive?) {} + fun withReferenceAsNullable(a: InlineReference?) {} + + fun withNullablePrimitiveAsNullable(a: InlineNullablePrimitive?) {} + fun withNullableReferenceAsNullable(a: InlineNullableReference?) {} +} + +// method: Test::withPrimitiveAsNullable +// jvm signature: (LInlinePrimitive;)V +// generic signature: null + +// method: Test::withReferenceAsNullable +// jvm signature: (Ljava/lang/String;)V +// generic signature: null + +// method: Test::withNullablePrimitiveAsNullable +// jvm signature: (LInlineNullablePrimitive;)V +// generic signature: null + +// method: Test::withNullableReferenceAsNullable +// jvm signature: (LInlineNullableReference;)V +// generic signature: null \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java index 8b91c340da9..7626b5ee613 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/WriteSignatureTestGenerated.java @@ -558,6 +558,12 @@ public class WriteSignatureTestGenerated extends AbstractWriteSignatureTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeSignature/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("nullableInlineClassType.kt") + public void testNullableInlineClassType() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeSignature/inlineClasses/nullableInlineClassType.kt"); + doTest(fileName); + } + @TestMetadata("simpleSignatureWithInlineClassTypesAsPrimitive.kt") public void testSimpleSignatureWithInlineClassTypesAsPrimitive() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsPrimitive.kt"); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/typeSignatureMapping.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/typeSignatureMapping.kt index 49c45ab0782..1570aeb618b 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/typeSignatureMapping.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/typeSignatureMapping.kt @@ -132,7 +132,13 @@ fun mapType( if (descriptor.isInline && !mode.needInlineClassWrapping) { val underlyingType = descriptor.underlyingRepresentation()?.type if (underlyingType != null) { - return mapType(underlyingType, factory, mode, typeMappingConfiguration, descriptorTypeWriter, writeGenericType) + if (!kotlinType.isMarkedNullable) { + return mapType(underlyingType, factory, mode, typeMappingConfiguration, descriptorTypeWriter, writeGenericType) + } + + if (!underlyingType.isMarkedNullable && !KotlinBuiltIns.isPrimitiveType(underlyingType)) { + return mapType(underlyingType, factory, mode, typeMappingConfiguration, descriptorTypeWriter, writeGenericType) + } } }