diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index 9456b5e2553..214860a16d0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt @@ -45,9 +45,9 @@ internal class KtFirNamedClassOrObjectSymbol( fir.symbol.classId.takeUnless { it.isLocal } } - override val modality: Modality get() = getModality() - - override val visibility: Visibility get() = getVisibility() + /* FirRegularClass modality and visibility does not modified by STATUS so it can be taken from RAW */ + override val modality: Modality get() = getModality(FirResolvePhase.RAW_FIR, Modality.FINAL) + override val visibility: Visibility get() = getVisibility(FirResolvePhase.RAW_FIR) override val annotations: List by cached { firRef.toAnnotationsList() } override fun containsAnnotation(classId: ClassId): Boolean = firRef.containsAnnotation(classId) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt index e03d13cd82e..4219c4e7d46 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.FirSession @@ -20,9 +21,13 @@ import org.jetbrains.kotlin.idea.util.getElementTextInContext import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.psi.KtDeclaration -internal fun KtFirSymbol.getModality() = - firRef.withFir(FirResolvePhase.STATUS) { fir -> +internal fun KtFirSymbol.getModality( + phase: FirResolvePhase = FirResolvePhase.STATUS, + defaultModality: Modality? = null +) = + firRef.withFir(phase) { fir -> fir.modality + ?: defaultModality ?: fir.invalidModalityError() } @@ -38,8 +43,8 @@ private fun FirDeclaration.invalidModalityError(): Nothing { } -internal fun KtFirSymbol.getVisibility(): Visibility = - firRef.withFir(FirResolvePhase.STATUS) { fir -> fir.visibility } +internal fun KtFirSymbol.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility = + firRef.withFir(phase) { fir -> fir.visibility } internal fun KtFirSymbol>.getCallableIdIfNonLocal(): CallableId? = firRef.withFir { fir -> fir.symbol.callableId.takeUnless { it.isLocal } }