diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaAnnotationSyntheticPropertiesScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaAnnotationSyntheticPropertiesScope.kt index faa4884c1bb..8aac4f6b65d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaAnnotationSyntheticPropertiesScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaAnnotationSyntheticPropertiesScope.kt @@ -52,7 +52,7 @@ class JavaAnnotationSyntheticPropertiesScope( name, isVar = false, it, - function.status.copy(newModality = Modality.FINAL), + function.status.copy(modality = Modality.FINAL), function.resolvePhase, accessor ) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index bf257cd23b5..d0f04559d67 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -82,7 +82,7 @@ class JavaClassUseSiteMemberScope( delegateGetter = getterSymbol.fir delegateSetter = setterSymbol?.fir status = getterSymbol.fir.status.copy( - newModality = if (takeModalityFromGetter) { + modality = if (takeModalityFromGetter) { delegateGetter.modality ?: property.modality } else { chooseModalityForAccessor(property, delegateGetter) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt index d426f3dfe04..8db21a212db 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -9,9 +9,11 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility 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.builder.buildTypeParameter 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.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* @@ -67,23 +69,52 @@ fun FirTypeRef.errorTypeFromPrototype( } fun FirDeclarationStatus.copy( + visibility: Visibility? = this.visibility, + modality: Modality? = this.modality, isExpect: Boolean = this.isExpect, - newModality: Modality? = null, - newVisibility: Visibility? = null, - newEffectiveVisibility: EffectiveVisibility? = null, - isOperator: Boolean = this.isOperator + isActual: Boolean = this.isActual, + isOverride: Boolean = this.isOverride, + 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 { - return if (this.isExpect == isExpect && newModality == null && newVisibility == null && this.isOperator == isOperator) { - this + val newVisibility = visibility ?: this.visibility + val newModality = modality ?: this.modality + val newStatus = if (this is FirResolvedDeclarationStatus) { + FirResolvedDeclarationStatusImpl(newVisibility, newModality!!, effectiveVisibility) } else { - require(this is FirDeclarationStatusImpl) { "Unexpected class ${this::class}" } - this.resolved( - newVisibility ?: visibility, - newModality ?: modality!!, - newEffectiveVisibility ?: EffectiveVisibility.Public - ).apply { - this.isExpect = isExpect - this.isOperator = isOperator - } + FirDeclarationStatusImpl(newVisibility, newModality) + } + return newStatus.apply { + this.isExpect = isExpect + this.isActual = isActual + this.isOverride = isOverride + 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 } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt index 2f048bd0efc..45abb2fe4ca 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt @@ -112,7 +112,7 @@ object FirFakeOverrideGenerator { moduleData = session.nullableModuleData ?: baseFunction.moduleData this.origin = origin name = baseFunction.name - status = baseFunction.status.copy(isExpect, newModality, newVisibility) + status = baseFunction.status.copy(newVisibility, newModality, isExpect = isExpect) symbol = newSymbol resolvePhase = baseFunction.resolvePhase @@ -145,7 +145,7 @@ object FirFakeOverrideGenerator { moduleData = session.moduleData this.origin = origin receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null) - status = baseConstructor.status.copy(isExpect) + status = baseConstructor.status.copy(isExpect = isExpect) symbol = fakeOverrideSymbol typeParameters += configureAnnotationsTypeParametersAndSignature( @@ -330,7 +330,7 @@ object FirFakeOverrideGenerator { isVar = baseProperty.isVar this.symbol = newSymbol isLocal = false - status = baseProperty.status.copy(isExpect, newModality, newVisibility) + status = baseProperty.status.copy(newVisibility, newModality, isExpect = isExpect) resolvePhase = baseProperty.resolvePhase dispatchReceiverType = newDispatchReceiverType