[FIR] Implement proper copy utility for FirDeclarationStatus
This commit is contained in:
committed by
teamcity
parent
c7e3da8709
commit
399aaeca9d
+1
-1
@@ -52,7 +52,7 @@ class JavaAnnotationSyntheticPropertiesScope(
|
|||||||
name,
|
name,
|
||||||
isVar = false,
|
isVar = false,
|
||||||
it,
|
it,
|
||||||
function.status.copy(newModality = Modality.FINAL),
|
function.status.copy(modality = Modality.FINAL),
|
||||||
function.resolvePhase,
|
function.resolvePhase,
|
||||||
accessor
|
accessor
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ class JavaClassUseSiteMemberScope(
|
|||||||
delegateGetter = getterSymbol.fir
|
delegateGetter = getterSymbol.fir
|
||||||
delegateSetter = setterSymbol?.fir
|
delegateSetter = setterSymbol?.fir
|
||||||
status = getterSymbol.fir.status.copy(
|
status = getterSymbol.fir.status.copy(
|
||||||
newModality = if (takeModalityFromGetter) {
|
modality = if (takeModalityFromGetter) {
|
||||||
delegateGetter.modality ?: property.modality
|
delegateGetter.modality ?: property.modality
|
||||||
} else {
|
} else {
|
||||||
chooseModalityForAccessor(property, delegateGetter)
|
chooseModalityForAccessor(property, delegateGetter)
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.builder.buildTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.*
|
import org.jetbrains.kotlin.fir.expressions.builder.*
|
||||||
@@ -67,23 +69,52 @@ fun FirTypeRef.errorTypeFromPrototype(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclarationStatus.copy(
|
fun FirDeclarationStatus.copy(
|
||||||
|
visibility: Visibility? = this.visibility,
|
||||||
|
modality: Modality? = this.modality,
|
||||||
isExpect: Boolean = this.isExpect,
|
isExpect: Boolean = this.isExpect,
|
||||||
newModality: Modality? = null,
|
isActual: Boolean = this.isActual,
|
||||||
newVisibility: Visibility? = null,
|
isOverride: Boolean = this.isOverride,
|
||||||
newEffectiveVisibility: EffectiveVisibility? = null,
|
isOperator: Boolean = this.isOperator,
|
||||||
isOperator: Boolean = this.isOperator
|
isInfix: Boolean = this.isInfix,
|
||||||
|
isInline: Boolean = this.isInline,
|
||||||
|
isTailRec: Boolean = this.isTailRec,
|
||||||
|
isExternal: Boolean = this.isExternal,
|
||||||
|
isConst: Boolean = this.isConst,
|
||||||
|
isLateInit: Boolean = this.isLateInit,
|
||||||
|
isInner: Boolean = this.isInner,
|
||||||
|
isCompanion: Boolean = this.isCompanion,
|
||||||
|
isData: Boolean = this.isData,
|
||||||
|
isSuspend: Boolean = this.isSuspend,
|
||||||
|
isStatic: Boolean = this.isStatic,
|
||||||
|
isFromSealedClass: Boolean = this.isFromSealedClass,
|
||||||
|
isFromEnumClass: Boolean = this.isFromEnumClass,
|
||||||
|
isFun: Boolean = this.isFun,
|
||||||
): FirDeclarationStatus {
|
): FirDeclarationStatus {
|
||||||
return if (this.isExpect == isExpect && newModality == null && newVisibility == null && this.isOperator == isOperator) {
|
val newVisibility = visibility ?: this.visibility
|
||||||
this
|
val newModality = modality ?: this.modality
|
||||||
|
val newStatus = if (this is FirResolvedDeclarationStatus) {
|
||||||
|
FirResolvedDeclarationStatusImpl(newVisibility, newModality!!, effectiveVisibility)
|
||||||
} else {
|
} else {
|
||||||
require(this is FirDeclarationStatusImpl) { "Unexpected class ${this::class}" }
|
FirDeclarationStatusImpl(newVisibility, newModality)
|
||||||
this.resolved(
|
}
|
||||||
newVisibility ?: visibility,
|
return newStatus.apply {
|
||||||
newModality ?: modality!!,
|
this.isExpect = isExpect
|
||||||
newEffectiveVisibility ?: EffectiveVisibility.Public
|
this.isActual = isActual
|
||||||
).apply {
|
this.isOverride = isOverride
|
||||||
this.isExpect = isExpect
|
this.isOperator = isOperator
|
||||||
this.isOperator = isOperator
|
this.isInfix = isInfix
|
||||||
}
|
this.isInline = isInline
|
||||||
|
this.isTailRec = isTailRec
|
||||||
|
this.isExternal = isExternal
|
||||||
|
this.isConst = isConst
|
||||||
|
this.isLateInit = isLateInit
|
||||||
|
this.isInner = isInner
|
||||||
|
this.isCompanion = isCompanion
|
||||||
|
this.isData = isData
|
||||||
|
this.isSuspend = isSuspend
|
||||||
|
this.isStatic = isStatic
|
||||||
|
this.isFromSealedClass = isFromSealedClass
|
||||||
|
this.isFromEnumClass = isFromEnumClass
|
||||||
|
this.isFun = isFun
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -112,7 +112,7 @@ object FirFakeOverrideGenerator {
|
|||||||
moduleData = session.nullableModuleData ?: baseFunction.moduleData
|
moduleData = session.nullableModuleData ?: baseFunction.moduleData
|
||||||
this.origin = origin
|
this.origin = origin
|
||||||
name = baseFunction.name
|
name = baseFunction.name
|
||||||
status = baseFunction.status.copy(isExpect, newModality, newVisibility)
|
status = baseFunction.status.copy(newVisibility, newModality, isExpect = isExpect)
|
||||||
symbol = newSymbol
|
symbol = newSymbol
|
||||||
resolvePhase = baseFunction.resolvePhase
|
resolvePhase = baseFunction.resolvePhase
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ object FirFakeOverrideGenerator {
|
|||||||
moduleData = session.moduleData
|
moduleData = session.moduleData
|
||||||
this.origin = origin
|
this.origin = origin
|
||||||
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null)
|
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null)
|
||||||
status = baseConstructor.status.copy(isExpect)
|
status = baseConstructor.status.copy(isExpect = isExpect)
|
||||||
symbol = fakeOverrideSymbol
|
symbol = fakeOverrideSymbol
|
||||||
|
|
||||||
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
||||||
@@ -330,7 +330,7 @@ object FirFakeOverrideGenerator {
|
|||||||
isVar = baseProperty.isVar
|
isVar = baseProperty.isVar
|
||||||
this.symbol = newSymbol
|
this.symbol = newSymbol
|
||||||
isLocal = false
|
isLocal = false
|
||||||
status = baseProperty.status.copy(isExpect, newModality, newVisibility)
|
status = baseProperty.status.copy(newVisibility, newModality, isExpect = isExpect)
|
||||||
|
|
||||||
resolvePhase = baseProperty.resolvePhase
|
resolvePhase = baseProperty.resolvePhase
|
||||||
dispatchReceiverType = newDispatchReceiverType
|
dispatchReceiverType = newDispatchReceiverType
|
||||||
|
|||||||
Reference in New Issue
Block a user