[FIR IDE] Fix invalid status for class symbols

This commit is contained in:
Igor Yakovlev
2021-06-07 20:46:15 +02:00
parent 21b1e4b072
commit 6c0bacc548
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.idea.fir.findPsi
@@ -47,9 +48,19 @@ internal class KtFirNamedClassOrObjectSymbol(
fir.symbol.classId.takeUnless { it.isLocal }
}
/* 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)
/* FirRegularClass modality does not modified by STATUS so it can be taken from RAW */
override val modality: Modality
get() = getModality(
FirResolvePhase.RAW_FIR,
if (classKind == KtClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
)
/* FirRegularClass visibility are not modified by STATUS only for Unknown so it can be taken from RAW */
override val visibility: Visibility
get() = when (val possiblyRawVisibility = getVisibility(FirResolvePhase.RAW_FIR)) {
Visibilities.Unknown -> if (firRef.withFir { it.isLocal }) Visibilities.Local else Visibilities.Public
else -> possiblyRawVisibility
}
override val annotations: List<KtAnnotationCall> by cached { firRef.toAnnotationsList() }
override fun containsAnnotation(classId: ClassId): Boolean = firRef.containsAnnotation(classId)
@@ -59,7 +70,7 @@ internal class KtFirNamedClassOrObjectSymbol(
override val isData: Boolean get() = firRef.withFir { it.isData }
override val isInline: Boolean get() = firRef.withFir { it.isInline }
override val isFun: Boolean get() = firRef.withFir { it.isFun }
override val isExternal: Boolean get() = firRef.withFir{ it.isExternal }
override val isExternal: Boolean get() = firRef.withFir { it.isExternal }
override val companionObject: KtFirNamedClassOrObjectSymbol? by firRef.withFirAndCache { fir ->
fir.companionObject?.let { builder.classifierBuilder.buildNamedClassOrObjectSymbol(it) }