diff --git a/compiler/testData/compileKotlinAgainstKotlin/annotationOnTypeUseInTypeAlias.kt b/compiler/testData/compileKotlinAgainstKotlin/annotationOnTypeUseInTypeAlias.kt new file mode 100644 index 00000000000..f4d38f6df6e --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/annotationOnTypeUseInTypeAlias.kt @@ -0,0 +1,31 @@ +// TARGET_BACKEND: JVM +// WITH_REFLECT +// FILE: A.kt +@Target(AnnotationTarget.TYPE) +annotation class Anno(val value: String) + +class Foo + +typealias MyFoo = Foo + +class C(val t: T) + +typealias MyC = C<@Anno("OK") MyFoo?> + +// FILE: B.kt +fun test(myc: MyC) {} + +fun box(): String { + test(C(null)) + + val mycType = ::test.parameters.single().type + val argumentType = mycType.arguments.single().type!! + if (!argumentType.isMarkedNullable) + return "Fail: argument type should be seen as nullable" + + val annotations = argumentType.annotations + if (annotations.toString() != "[@Anno(value=OK)]") + return "Fail: $annotations" + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index 10b1492161a..c878917801c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -38,6 +38,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/annotationInInterface.kt"); } + @TestMetadata("annotationOnTypeUseInTypeAlias.kt") + public void testAnnotationOnTypeUseInTypeAlias() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/annotationOnTypeUseInTypeAlias.kt"); + } + @TestMetadata("annotationsOnTypeAliases.kt") public void testAnnotationsOnTypeAliases() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/annotationsOnTypeAliases.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java index b0fe25b73dd..f16ce86ba6b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -38,6 +38,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile runTest("compiler/testData/compileKotlinAgainstKotlin/annotationInInterface.kt"); } + @TestMetadata("annotationOnTypeUseInTypeAlias.kt") + public void testAnnotationOnTypeUseInTypeAlias() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/annotationOnTypeUseInTypeAlias.kt"); + } + @TestMetadata("annotationsOnTypeAliases.kt") public void testAnnotationsOnTypeAliases() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/annotationsOnTypeAliases.kt"); diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt index a94b2acc996..1fc591ef9ce 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt @@ -92,8 +92,12 @@ class TypeDeserializer( val declarationDescriptor = constructor.declarationDescriptor val simpleType = when { - expandTypeAliases && declarationDescriptor is TypeAliasDescriptor -> - with(KotlinTypeFactory) { declarationDescriptor.computeExpandedType(arguments) } + expandTypeAliases && declarationDescriptor is TypeAliasDescriptor -> { + val expandedType = with(KotlinTypeFactory) { declarationDescriptor.computeExpandedType(arguments) } + expandedType + .makeNullableAsSpecified(proto.nullable) + .replaceAnnotations(Annotations.create(annotations + expandedType.annotations)) + } Flags.SUSPEND_TYPE.get(proto.flags) -> createSuspendFunctionType(annotations, constructor, arguments, proto.nullable) else ->