[FIR] Copy java enum entry during enhancement instead of mutating it
#KT-57949 Fixed
This commit is contained in:
committed by
Space Team
parent
f5168527ae
commit
49e786f088
+8
-4
@@ -109,10 +109,14 @@ class FirSignatureEnhancement(
|
||||
)
|
||||
|
||||
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), firElement.computeDefaultQualifiers(), predefinedInfo)
|
||||
return firElement.symbol.apply {
|
||||
this.fir.replaceReturnTypeRef(newReturnTypeRef)
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(newReturnTypeRef, this.fir.source, null)
|
||||
}
|
||||
|
||||
return buildEnumEntryCopy(firElement) {
|
||||
symbol = FirEnumEntrySymbol(firElement.symbol.callableId)
|
||||
returnTypeRef = newReturnTypeRef
|
||||
origin = FirDeclarationOrigin.Enhancement
|
||||
}.apply {
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(newReturnTypeRef, this.source, null)
|
||||
}.symbol
|
||||
}
|
||||
is FirField -> {
|
||||
if (firElement.returnTypeRef !is FirJavaTypeRef) return original
|
||||
|
||||
+26
@@ -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()
|
||||
}
|
||||
|
||||
+4
@@ -260,6 +260,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
withCopy()
|
||||
}
|
||||
|
||||
builder(enumEntry) {
|
||||
withCopy()
|
||||
}
|
||||
|
||||
builder(typeOperatorCall) {
|
||||
parents += callBuilder
|
||||
default("argumentList") {
|
||||
|
||||
Reference in New Issue
Block a user