FIR: Minor. Extract FirDeclarationStatus.copy
This commit is contained in:
@@ -6,12 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
|
||||||
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.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.*
|
||||||
@@ -166,3 +166,18 @@ fun FirCheckNotNullCall.copy(
|
|||||||
this.typeRef = resultType
|
this.typeRef = resultType
|
||||||
this.annotations += annotations
|
this.annotations += annotations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun FirDeclarationStatus.copy(
|
||||||
|
isExpect: Boolean = this.isExpect,
|
||||||
|
newModality: Modality? = null,
|
||||||
|
newVisibility: Visibility? = null,
|
||||||
|
): FirDeclarationStatus {
|
||||||
|
return if (this.isExpect == isExpect && newModality == null && newVisibility == null) {
|
||||||
|
this
|
||||||
|
} else {
|
||||||
|
require(this is FirDeclarationStatusImpl) { "Unexpected class ${this::class}" }
|
||||||
|
this.resolved(newVisibility ?: visibility, newModality ?: modality!!).apply {
|
||||||
|
this.isExpect = isExpect
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+5
-19
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.*
|
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.originalForSubstitutionOverrideAttr
|
import org.jetbrains.kotlin.fir.originalForSubstitutionOverrideAttr
|
||||||
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
|
import org.jetbrains.kotlin.fir.copy
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ object FirFakeOverrideGenerator {
|
|||||||
this.session = session
|
this.session = session
|
||||||
this.origin = origin
|
this.origin = origin
|
||||||
name = baseFunction.name
|
name = baseFunction.name
|
||||||
status = baseFunction.status.updatedStatus(isExpect, newModality, newVisibility)
|
status = baseFunction.status.copy(isExpect, newModality, newVisibility)
|
||||||
symbol = newSymbol
|
symbol = newSymbol
|
||||||
resolvePhase = baseFunction.resolvePhase
|
resolvePhase = baseFunction.resolvePhase
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ object FirFakeOverrideGenerator {
|
|||||||
this.session = session
|
this.session = session
|
||||||
origin = FirDeclarationOrigin.SubstitutionOverride
|
origin = FirDeclarationOrigin.SubstitutionOverride
|
||||||
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null)
|
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null)
|
||||||
status = baseConstructor.status.updatedStatus(isExpect)
|
status = baseConstructor.status.copy(isExpect)
|
||||||
symbol = fakeOverrideSymbol
|
symbol = fakeOverrideSymbol
|
||||||
|
|
||||||
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
||||||
@@ -288,7 +288,7 @@ object FirFakeOverrideGenerator {
|
|||||||
isVar = baseProperty.isVar
|
isVar = baseProperty.isVar
|
||||||
this.symbol = newSymbol
|
this.symbol = newSymbol
|
||||||
isLocal = false
|
isLocal = false
|
||||||
status = baseProperty.status.updatedStatus(isExpect, newModality, newVisibility)
|
status = baseProperty.status.copy(isExpect, newModality, newVisibility)
|
||||||
|
|
||||||
resolvePhase = baseProperty.resolvePhase
|
resolvePhase = baseProperty.resolvePhase
|
||||||
dispatchReceiverType = newDispatchReceiverType
|
dispatchReceiverType = newDispatchReceiverType
|
||||||
@@ -450,24 +450,10 @@ object FirFakeOverrideGenerator {
|
|||||||
symbol = FirAccessorSymbol(baseSymbol.callableId, baseSymbol.accessorId)
|
symbol = FirAccessorSymbol(baseSymbol.callableId, baseSymbol.accessorId)
|
||||||
delegateGetter = getter
|
delegateGetter = getter
|
||||||
delegateSetter = setter
|
delegateSetter = setter
|
||||||
|
status = baseProperty.status
|
||||||
}.symbol
|
}.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclarationStatus.updatedStatus(
|
|
||||||
isExpect: Boolean,
|
|
||||||
newModality: Modality? = null,
|
|
||||||
newVisibility: Visibility? = null,
|
|
||||||
): FirDeclarationStatus {
|
|
||||||
return if (this.isExpect == isExpect && newModality == null && newVisibility == null) {
|
|
||||||
this
|
|
||||||
} else {
|
|
||||||
require(this is FirDeclarationStatusImpl) { "Unexpected class ${this::class}" }
|
|
||||||
this.resolved(newVisibility ?: visibility, newModality ?: modality!!).apply {
|
|
||||||
this.isExpect = isExpect
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a list of type parameters, and a substitutor that should be used for all other types
|
// Returns a list of type parameters, and a substitutor that should be used for all other types
|
||||||
fun createNewTypeParametersAndSubstitutor(
|
fun createNewTypeParametersAndSubstitutor(
|
||||||
member: FirTypeParameterRefsOwner,
|
member: FirTypeParameterRefsOwner,
|
||||||
|
|||||||
Reference in New Issue
Block a user