diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt index 6d16304bb53..eab61372512 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt @@ -455,7 +455,7 @@ object FirSerializationPluginClassChecker : FirClassChecker() { val serializerSymbol = customSerializerType?.toRegularClassSymbol(session) val propertySymbol = property.propertySymbol val typeRef = propertySymbol.resolvedReturnTypeRef - val propertyType = typeRef.coneType + val propertyType = typeRef.coneType.fullyExpandedType(session) val source = typeRef.source ?: propertySymbol.source if (customSerializerType != null && serializerSymbol != null) { // Do not account for @Polymorphic and @Contextual, as they are serializers for T: Any @@ -498,7 +498,7 @@ object FirSerializationPluginClassChecker : FirClassChecker() { private fun checkTypeArguments(type: ConeKotlinType, source: KtSourceElement?, reporter: DiagnosticReporter) { for (typeArgument in type.typeArguments) { checkType( - typeArgument.type ?: continue, + typeArgument.type?.fullyExpandedType(session) ?: continue, source, reporter ) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/typeAliases.kt b/plugins/kotlinx-serialization/testData/diagnostics/typeAliases.kt new file mode 100644 index 00000000000..c35f928eb17 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/typeAliases.kt @@ -0,0 +1,23 @@ +// FIR_IDENTICAL +// FIR_DISABLE_LAZY_RESOLVE_CHECKS +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.* + +typealias MyString = String +typealias MyLong = Long + +@Serializable +class Box(val t: T) + +typealias MyBox = Box + +@Serializable +class Foo( + val s: MyString, + val l: MyLong, + val b: Box, + val bb: MyBox, + val bbb: MyBox +) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/testData/diagnostics/typeAliasesCustomized.kt b/plugins/kotlinx-serialization/testData/diagnostics/typeAliasesCustomized.kt new file mode 100644 index 00000000000..72008042343 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/typeAliasesCustomized.kt @@ -0,0 +1,22 @@ +// FIR_IDENTICAL +// FIR_DISABLE_LAZY_RESOLVE_CHECKS +// WITH_STDLIB +// SKIP_TXT + +import kotlinx.serialization.* +import kotlinx.serialization.descriptors.* +import kotlinx.serialization.encoding.* + +@Serializable(ExplicitSerializer::class) +data class Klass(val s: String) + +object ExplicitSerializer : KSerializer { + override val descriptor: SerialDescriptor get() = PrimitiveSerialDescriptor("klass", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: Klass) { encoder.encodeString(value.s) } + override fun deserialize(decoder: Decoder): Klass { return Klass(decoder.decodeString()) } +} + +typealias KlassAlias = Klass + +@Serializable +data class DataKlass(val k: KlassAlias) \ No newline at end of file diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java index 16e71234ffc..d6bffa4fbe1 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java @@ -151,6 +151,18 @@ public class SerializationFirPsiDiagnosticTestGenerated extends AbstractSerializ public void testTransients() throws Exception { runTest("plugins/kotlinx-serialization/testData/diagnostics/Transients.kt"); } + + @Test + @TestMetadata("typeAliases.kt") + public void testTypeAliases() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/typeAliases.kt"); + } + + @Test + @TestMetadata("typeAliasesCustomized.kt") + public void testTypeAliasesCustomized() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/typeAliasesCustomized.kt"); + } } @Nested diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java index 445a502c366..c6fd7ef3bd9 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java @@ -149,4 +149,16 @@ public class SerializationPluginDiagnosticTestGenerated extends AbstractSerializ public void testTransients() throws Exception { runTest("plugins/kotlinx-serialization/testData/diagnostics/Transients.kt"); } + + @Test + @TestMetadata("typeAliases.kt") + public void testTypeAliases() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/typeAliases.kt"); + } + + @Test + @TestMetadata("typeAliasesCustomized.kt") + public void testTypeAliasesCustomized() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/typeAliasesCustomized.kt"); + } }