diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 3370e53d9fe..74f5b23258f 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -28,14 +28,14 @@ import org.jetbrains.kotlin.fir.extensions.typeAttributeExtensions import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider 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.processAllProperties import org.jetbrains.kotlin.fir.serialization.constant.EnumValue import org.jetbrains.kotlin.fir.serialization.constant.IntValue import org.jetbrains.kotlin.fir.serialization.constant.StringValue import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue -import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl @@ -148,12 +148,19 @@ class FirElementSerializer private constructor( } } - val nestedClassifiers = klass.declarations.filterIsInstance() + fun FirClass.nestedClassifiers(): List> { + 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) { - if (nestedClassifier is FirTypeAlias) { - typeAliasProto(nestedClassifier)?.let { builder.addTypeAlias(it) } - } else if (nestedClassifier is FirRegularClass) { - if (!extension.shouldSerializeNestedClass(nestedClassifier)) { + if (nestedClassifier is FirTypeAliasSymbol) { + typeAliasProto(nestedClassifier.fir)?.let { builder.addTypeAlias(it) } + } else if (nestedClassifier is FirRegularClassSymbol) { + if (!extension.shouldSerializeNestedClass(nestedClassifier.fir)) { continue } diff --git a/plugins/kotlinx-serialization/testData/boxIr/generatedClassifiersViaLibraryDependency.kt b/plugins/kotlinx-serialization/testData/boxIr/generatedClassifiersViaLibraryDependency.kt new file mode 100644 index 00000000000..93fc5ae65d0 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/boxIr/generatedClassifiersViaLibraryDependency.kt @@ -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" +} \ No newline at end of file diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java index 32fb3327b9c..27b88125ee3 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java @@ -69,6 +69,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization 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 @TestMetadata("genericBaseClassMultiple.kt") public void testGenericBaseClassMultiple() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java index 6a36d0729cf..3e66d7d85c2 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java @@ -67,6 +67,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT 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 @TestMetadata("genericBaseClassMultiple.kt") public void testGenericBaseClassMultiple() throws Exception {