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) }
|
.let { restoreCorrectOrderFromClassProtoExtension(classSymbol, it) }
|
||||||
|
|
||||||
val isExternallySerializable = classSymbol.isEnumClass ||
|
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 }
|
val (serializableConstructorProperties, serializableStandaloneProperties) = serializableProperties.partition { it.propertySymbol in primaryConstructorProperties }
|
||||||
return FirSerializableProperties(
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("ExternalSerializers.kt")
|
@TestMetadata("ExternalSerializers.kt")
|
||||||
public void testExternalSerializers() throws Exception {
|
public void testExternalSerializers() throws Exception {
|
||||||
|
|||||||
+6
@@ -42,6 +42,12 @@ public class SerializationPluginDiagnosticTestGenerated extends AbstractSerializ
|
|||||||
runTest("plugins/kotlinx-serialization/testData/diagnostics/EnumDuplicateSerialName.kt");
|
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
|
@Test
|
||||||
@TestMetadata("ExternalSerializers.kt")
|
@TestMetadata("ExternalSerializers.kt")
|
||||||
public void testExternalSerializers() throws Exception {
|
public void testExternalSerializers() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user