[FIR IDE] Use raw fir for modality and visibility in KtFirNamedClassOrObjectSymbol

This commit is contained in:
Igor Yakovlev
2021-04-07 15:18:42 +02:00
parent 7cd306950a
commit 7a3781ec14
2 changed files with 12 additions and 7 deletions
@@ -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<KtAnnotationCall> by cached { firRef.toAnnotationsList() }
override fun containsAnnotation(classId: ClassId): Boolean = firRef.containsAnnotation(classId)
@@ -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<FirMemberDeclaration>.getModality() =
firRef.withFir(FirResolvePhase.STATUS) { fir ->
internal fun KtFirSymbol<FirMemberDeclaration>.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 <F : FirMemberDeclaration> KtFirSymbol<F>.getVisibility(): Visibility =
firRef.withFir(FirResolvePhase.STATUS) { fir -> fir.visibility }
internal fun <F : FirMemberDeclaration> KtFirSymbol<F>.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility =
firRef.withFir(phase) { fir -> fir.visibility }
internal fun KtFirSymbol<FirCallableDeclaration<*>>.getCallableIdIfNonLocal(): CallableId? =
firRef.withFir { fir -> fir.symbol.callableId.takeUnless { it.isLocal } }