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:
committed by
Space Team
parent
56cd150554
commit
76fc7ce0ad
+1
-1
@@ -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()
|
||||
}
|
||||
}
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user