[FIR] Copy java enum entry during enhancement instead of mutating it

#KT-57949 Fixed
This commit is contained in:
Kirill Rakhman
2023-11-15 17:20:23 +01:00
committed by Space Team
parent f5168527ae
commit 49e786f088
3 changed files with 38 additions and 4 deletions
@@ -77,3 +77,29 @@ inline fun buildEnumEntry(init: FirEnumEntryBuilder.() -> Unit): FirEnumEntry {
}
return FirEnumEntryBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildEnumEntryCopy(original: FirEnumEntry, init: FirEnumEntryBuilder.() -> Unit): FirEnumEntry {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirEnumEntryBuilder()
copyBuilder.source = original.source
copyBuilder.resolvePhase = original.resolvePhase
copyBuilder.moduleData = original.moduleData
copyBuilder.origin = original.origin
copyBuilder.attributes = original.attributes.copy()
copyBuilder.typeParameters.addAll(original.typeParameters)
copyBuilder.status = original.status
copyBuilder.returnTypeRef = original.returnTypeRef
copyBuilder.deprecationsProvider = original.deprecationsProvider
copyBuilder.containerSource = original.containerSource
copyBuilder.dispatchReceiverType = original.dispatchReceiverType
copyBuilder.contextReceivers.addAll(original.contextReceivers)
copyBuilder.name = original.name
copyBuilder.initializer = original.initializer
copyBuilder.backingField = original.backingField
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.symbol = original.symbol
return copyBuilder.apply(init).build()
}