Fix creating FirSerializableProperties for external classes.

External classes do not have primary constructor, so we need to use 0 as
value parameter count for them to be externally serializable when possible.
This commit is contained in:
Leonid Startsev
2022-11-15 19:24:13 +01:00
committed by Space Team
parent 56cd150554
commit 76fc7ce0ad
4 changed files with 34 additions and 1 deletions
@@ -89,7 +89,7 @@ class FirSerializablePropertiesProvider(session: FirSession) : FirExtensionSessi
.let { restoreCorrectOrderFromClassProtoExtension(classSymbol, it) }
val isExternallySerializable = classSymbol.isEnumClass ||
primaryConstructorProperties.size == classSymbol.primaryConstructorSymbol()?.valueParameterSymbols?.size
primaryConstructorProperties.size == (classSymbol.primaryConstructorSymbol()?.valueParameterSymbols?.size ?: 0)
val (serializableConstructorProperties, serializableStandaloneProperties) = serializableProperties.partition { it.propertySymbol in primaryConstructorProperties }
return FirSerializableProperties(
@@ -0,0 +1,21 @@
// FIR_IDENTICAL
// WITH_STDLIB
// SKIP_TXT
import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import java.util.*
@Serializer(forClass = Date::class)
object DateSerializer : KSerializer<Date> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.util.Date", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Date) {
TODO()
}
override fun deserialize(decoder: Decoder): Date {
TODO()
}
}
@@ -44,6 +44,12 @@ public class SerializationFirDiagnosticTestGenerated extends AbstractSerializati
runTest("plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.kt");
}
@Test
@TestMetadata("externalSerialierJava.kt")
public void testExternalSerialierJava() throws Exception {
runTest("plugins/kotlinx-serialization/testData/diagnostics/externalSerialierJava.kt");
}
@Test
@TestMetadata("ExternalSerializers.kt")
public void testExternalSerializers() throws Exception {
@@ -42,6 +42,12 @@ public class SerializationPluginDiagnosticTestGenerated extends AbstractSerializ
runTest("plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.kt");
}
@Test
@TestMetadata("externalSerialierJava.kt")
public void testExternalSerialierJava() throws Exception {
runTest("plugins/kotlinx-serialization/testData/diagnostics/externalSerialierJava.kt");
}
@Test
@TestMetadata("ExternalSerializers.kt")
public void testExternalSerializers() throws Exception {