From 7a3781ec1482e6ad0b0b552fa26363018444170d Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 7 Apr 2021 15:18:42 +0200 Subject: [PATCH] [FIR IDE] Use raw fir for modality and visibility in KtFirNamedClassOrObjectSymbol --- .../fir/symbols/KtFirNamedClassOrObjectSymbol.kt | 6 +++--- .../idea/frontend/api/fir/symbols/firSymbolUtils.kt | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) 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 } }