[KxSerialization] Change visibility for synthetic functions

- synthetic constructor became internal for final classes
- write$Self became internal for final classes

Resolves https://github.com/Kotlin/kotlinx.serialization/issues/2209

Merge-request: KT-MR-9068
Merged-by: Sergey Shanshin <Sergey.Shanshin@jetbrains.com>
This commit is contained in:
Sergey.Shanshin
2023-07-14 17:36:22 +00:00
committed by Space Team
parent 9f85739599
commit 5ba1b36796
20 changed files with 53 additions and 42 deletions
@@ -5,9 +5,11 @@
package org.jetbrains.kotlinx.serialization.compiler.fir
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
@@ -42,6 +44,9 @@ class SerializationFirDeclarationsForMetadataProvider(session: FirSession) : Fir
private fun generateDeserializationConstructor(klass: FirClass): FirDeclaration =
createConstructor(klass.symbol, SerializationPluginKey, isPrimary = false) {
// deserialization constructor for final classes could be internal, because it can't be called in inheritors
visibility = if (klass.isFinal) Visibilities.Internal else Visibilities.Public
val serializableProperties =
session.serializablePropertiesProvider.getSerializablePropertiesForClass(klass.symbol).serializableProperties
val bitMaskSlotCount = serializableProperties.bitMaskSlotCount()
@@ -71,6 +76,9 @@ class SerializationFirDeclarationsForMetadataProvider(session: FirSession) : Fir
SerialEntityNames.WRITE_SELF_NAME,
session.builtinTypes.unitType.type
) {
// write$Self for final classes could be internal, because it can't be called in inheritors
visibility = if (klass.isFinal) Visibilities.Internal else Visibilities.Public
klass.typeParameters.forEach {
typeParameter(it.symbol.name)
}