diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt index 15f39fa7c7e..f27a59b2bae 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.plugin.createConeType import org.jetbrains.kotlin.fir.plugin.createMemberFunction import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes -import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.CallableId @@ -104,15 +103,14 @@ class FirParcelizeDeclarationGenerator(session: FirSession) : FirDeclarationGene } } - @OptIn(SymbolInternals::class) override fun getCallableNamesForClass(classSymbol: FirClassSymbol<*>, context: MemberGenerationContext): Set { return when { - classSymbol.fir.modality == Modality.ABSTRACT -> emptySet() - classSymbol in matchedClasses && classSymbol.fir.modality != Modality.SEALED -> parcelizeMethodsNames + classSymbol.rawStatus.modality == Modality.ABSTRACT || classSymbol.rawStatus.modality == Modality.SEALED -> emptySet() + classSymbol in matchedClasses && classSymbol.rawStatus.modality != Modality.SEALED -> parcelizeMethodsNames else -> { val hasAnnotatedSealedSuperType = classSymbol.resolvedSuperTypeRefs.any { val superSymbol = it.type.fullyExpandedType(session).toRegularClassSymbol(session) ?: return@any false - superSymbol.fir.modality == Modality.SEALED && superSymbol in matchedClasses + superSymbol.rawStatus.modality == Modality.SEALED && superSymbol in matchedClasses } if (hasAnnotatedSealedSuperType) { parcelizeMethodsNames diff --git a/plugins/parcelize/parcelize-compiler/testData/box/sealedClass2.kt b/plugins/parcelize/parcelize-compiler/testData/box/sealedClass2.kt index 5fdb9638bb1..376609756d6 100644 --- a/plugins/parcelize/parcelize-compiler/testData/box/sealedClass2.kt +++ b/plugins/parcelize/parcelize-compiler/testData/box/sealedClass2.kt @@ -11,6 +11,7 @@ import android.os.Parcelable sealed class Foo : Parcelable { data class A(val x: Int) : Foo() object B : Foo() + sealed class Inner : Foo() } data class C(val x: String) : Foo() diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.fir.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.fir.kt index 2d8e453a6f2..816c7f96d06 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.fir.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.fir.kt @@ -15,6 +15,9 @@ class Final(val foo: String) : Parcelable @Parcelize sealed class Sealed(val foo: String) : Parcelable { class X : Sealed("") + sealed class Inner : Sealed("") { + class Y : Inner() + } } class Outer { diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt index 38441e5314e..479b51a91fa 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt @@ -15,6 +15,9 @@ class Final(val foo: String) : Parcelable @Parcelize sealed class Sealed(val foo: String) : Parcelable { class X : Sealed("") + sealed class Inner : Sealed("") { + class Y : Inner() + } } class Outer {