[FIR Serialization] Fix serialization of generated nested classifiers
^KT-55759 Fixed
This commit is contained in:
+14
-7
@@ -28,14 +28,14 @@ import org.jetbrains.kotlin.fir.extensions.typeAttributeExtensions
|
|||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.getSingleClassifier
|
||||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.processAllProperties
|
import org.jetbrains.kotlin.fir.scopes.processAllProperties
|
||||||
import org.jetbrains.kotlin.fir.serialization.constant.EnumValue
|
import org.jetbrains.kotlin.fir.serialization.constant.EnumValue
|
||||||
import org.jetbrains.kotlin.fir.serialization.constant.IntValue
|
import org.jetbrains.kotlin.fir.serialization.constant.IntValue
|
||||||
import org.jetbrains.kotlin.fir.serialization.constant.StringValue
|
import org.jetbrains.kotlin.fir.serialization.constant.StringValue
|
||||||
import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue
|
import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
@@ -148,12 +148,19 @@ class FirElementSerializer private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val nestedClassifiers = klass.declarations.filterIsInstance<FirClassLikeDeclaration>()
|
fun FirClass.nestedClassifiers(): List<FirClassifierSymbol<*>> {
|
||||||
|
val scope = defaultType().scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing) ?: return emptyList()
|
||||||
|
return buildList {
|
||||||
|
scope.getClassifierNames().mapNotNullTo(this) { scope.getSingleClassifier(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val nestedClassifiers = klass.nestedClassifiers()
|
||||||
for (nestedClassifier in nestedClassifiers) {
|
for (nestedClassifier in nestedClassifiers) {
|
||||||
if (nestedClassifier is FirTypeAlias) {
|
if (nestedClassifier is FirTypeAliasSymbol) {
|
||||||
typeAliasProto(nestedClassifier)?.let { builder.addTypeAlias(it) }
|
typeAliasProto(nestedClassifier.fir)?.let { builder.addTypeAlias(it) }
|
||||||
} else if (nestedClassifier is FirRegularClass) {
|
} else if (nestedClassifier is FirRegularClassSymbol) {
|
||||||
if (!extension.shouldSerializeNestedClass(nestedClassifier)) {
|
if (!extension.shouldSerializeNestedClass(nestedClassifier.fir)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
// ISSUE: KT-55759
|
||||||
|
// TARGET_BACKEND: JVM_IR
|
||||||
|
// WITH_STDLIB
|
||||||
|
|
||||||
|
// MODULE: lib
|
||||||
|
// TARGET_PLATFORM: JVM
|
||||||
|
// FILE: lib.kt
|
||||||
|
|
||||||
|
import kotlinx.serialization.*
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
class Test
|
||||||
|
|
||||||
|
// MODULE: jvm(lib)()()
|
||||||
|
// TARGET_PLATFORM: JVM
|
||||||
|
// FILE: main.kt
|
||||||
|
|
||||||
|
import kotlinx.serialization.*
|
||||||
|
import kotlinx.serialization.descriptors.*
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return if (Test.serializer().descriptor.toString() == "Test()") "OK" else "FAIL"
|
||||||
|
}
|
||||||
+6
@@ -69,6 +69,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization
|
|||||||
runTest("plugins/kotlinx-serialization/testData/boxIr/externalSerialierJava.kt");
|
runTest("plugins/kotlinx-serialization/testData/boxIr/externalSerialierJava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("generatedClassifiersViaLibraryDependency.kt")
|
||||||
|
public void testGeneratedClassifiersViaLibraryDependency() throws Exception {
|
||||||
|
runTest("plugins/kotlinx-serialization/testData/boxIr/generatedClassifiersViaLibraryDependency.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("genericBaseClassMultiple.kt")
|
@TestMetadata("genericBaseClassMultiple.kt")
|
||||||
public void testGenericBaseClassMultiple() throws Exception {
|
public void testGenericBaseClassMultiple() throws Exception {
|
||||||
|
|||||||
+6
@@ -67,6 +67,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT
|
|||||||
runTest("plugins/kotlinx-serialization/testData/boxIr/externalSerialierJava.kt");
|
runTest("plugins/kotlinx-serialization/testData/boxIr/externalSerialierJava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("generatedClassifiersViaLibraryDependency.kt")
|
||||||
|
public void testGeneratedClassifiersViaLibraryDependency() throws Exception {
|
||||||
|
runTest("plugins/kotlinx-serialization/testData/boxIr/generatedClassifiersViaLibraryDependency.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("genericBaseClassMultiple.kt")
|
@TestMetadata("genericBaseClassMultiple.kt")
|
||||||
public void testGenericBaseClassMultiple() throws Exception {
|
public void testGenericBaseClassMultiple() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user