From 24f35ef281cb42decaed56bc5e32956e9fa73dda Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Thu, 25 Mar 2021 16:03:37 +0300 Subject: [PATCH] FIR: Minor. Extract FirDeclarationStatus.copy --- .../src/org/jetbrains/kotlin/fir/CopyUtils.kt | 23 ++++++++++++++---- .../scopes/impl/FirFakeOverrideGenerator.kt | 24 ++++--------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt index cab6f986109..e674f4322aa 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -6,12 +6,12 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange -import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction -import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirTypeParameter -import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction 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.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* @@ -166,3 +166,18 @@ fun FirCheckNotNullCall.copy( this.typeRef = resultType 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 + } + } +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt index 314057ab22c..3a4ae74bf6d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* 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.buildSyntheticProperty 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.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl +import org.jetbrains.kotlin.fir.copy import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.utils.addToStdlib.runIf @@ -104,7 +104,7 @@ object FirFakeOverrideGenerator { this.session = session this.origin = origin name = baseFunction.name - status = baseFunction.status.updatedStatus(isExpect, newModality, newVisibility) + status = baseFunction.status.copy(isExpect, newModality, newVisibility) symbol = newSymbol resolvePhase = baseFunction.resolvePhase @@ -133,7 +133,7 @@ object FirFakeOverrideGenerator { this.session = session origin = FirDeclarationOrigin.SubstitutionOverride receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null) - status = baseConstructor.status.updatedStatus(isExpect) + status = baseConstructor.status.copy(isExpect) symbol = fakeOverrideSymbol typeParameters += configureAnnotationsTypeParametersAndSignature( @@ -288,7 +288,7 @@ object FirFakeOverrideGenerator { isVar = baseProperty.isVar this.symbol = newSymbol isLocal = false - status = baseProperty.status.updatedStatus(isExpect, newModality, newVisibility) + status = baseProperty.status.copy(isExpect, newModality, newVisibility) resolvePhase = baseProperty.resolvePhase dispatchReceiverType = newDispatchReceiverType @@ -450,24 +450,10 @@ object FirFakeOverrideGenerator { symbol = FirAccessorSymbol(baseSymbol.callableId, baseSymbol.accessorId) delegateGetter = getter delegateSetter = setter + status = baseProperty.status }.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 fun createNewTypeParametersAndSubstitutor( member: FirTypeParameterRefsOwner,