@@ -25,7 +25,9 @@ import com.javiersc.kotlin.kopy.compiler.kopyFunctionUpdateEachClassId
2525import com.javiersc.kotlin.kopy.compiler.kopyOptInClassId
2626import com.javiersc.kotlin.kopy.compiler.measureExecution
2727import com.javiersc.kotlin.kopy.compiler.measureKey
28+ import com.javiersc.kotlin.kopy.compiler.serializableAnnotationClassId
2829import com.javiersc.kotlin.kopy.compiler.setName
30+ import com.javiersc.kotlin.kopy.compiler.transientAnnotationClassId
2931import com.javiersc.kotlin.kopy.compiler.underscoreAtomicName
3032import com.javiersc.kotlin.kopy.compiler.updateEachName
3133import com.javiersc.kotlin.kopy.compiler.updateName
@@ -130,16 +132,17 @@ internal class FirKopyDeclarationGenerationExtension(
130132
131133 val atomicProperty: FirProperty =
132134 createMemberProperty(
133- owner = context.owner,
134- key = Key ,
135- name = callableId.callableName,
136- returnType = atomicRefType,
137- config = {
138- status { isOverride = false }
139- modality = Modality .FINAL
140- visibility = atomicVisibility
141- },
142- )
135+ owner = context.owner,
136+ key = Key ,
137+ name = callableId.callableName,
138+ returnType = atomicRefType,
139+ config = {
140+ status { isOverride = false }
141+ modality = Modality .FINAL
142+ visibility = atomicVisibility
143+ },
144+ )
145+ .apply { addTransientAnnotationIfOwnedBySerializable(owner = owner) }
143146 return listOf (atomicProperty.symbol)
144147 }
145148
@@ -423,6 +426,17 @@ internal class FirKopyDeclarationGenerationExtension(
423426 ?.toFirTypeRef()
424427 ?.let (::createFirAnnotation)
425428
429+ private fun FirProperty.addTransientAnnotationIfOwnedBySerializable (owner : FirClassSymbol <* >) {
430+ val isSerializable: Boolean = owner.hasAnnotation(serializableAnnotationClassId, session)
431+ if (isSerializable) {
432+ val replacedAnnotations: List <FirAnnotation > = buildList {
433+ addAll(annotations)
434+ createAnnotation(classId = transientAnnotationClassId)?.let (::add)
435+ }
436+ replaceAnnotations(replacedAnnotations)
437+ }
438+ }
439+
426440 private fun calculateVisibility (classSymbol : FirClassSymbol <* >): Visibility {
427441 val visibility: Visibility =
428442 classSymbol.primaryConstructorSymbol(session)?.visibility ? : return Visibilities .Public
0 commit comments