[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 com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.fir.findPsi
@@ -47,9 +48,19 @@ internal class KtFirNamedClassOrObjectSymbol(
fir.symbol.classId.takeUnless { it.isLocal } fir.symbol.classId.takeUnless { it.isLocal }
} }
/* FirRegularClass modality and visibility does not modified by STATUS so it can be taken from RAW */ /* FirRegularClass modality 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 modality: Modality
override val visibility: Visibility get() = getVisibility(FirResolvePhase.RAW_FIR) 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 val annotations: List<KtAnnotationCall> by cached { firRef.toAnnotationsList() }
override fun containsAnnotation(classId: ClassId): Boolean = firRef.containsAnnotation(classId) 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 isData: Boolean get() = firRef.withFir { it.isData }
override val isInline: Boolean get() = firRef.withFir { it.isInline } override val isInline: Boolean get() = firRef.withFir { it.isInline }
override val isFun: Boolean get() = firRef.withFir { it.isFun } 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 -> override val companionObject: KtFirNamedClassOrObjectSymbol? by firRef.withFirAndCache { fir ->
fir.companionObject?.let { builder.classifierBuilder.buildNamedClassOrObjectSymbol(it) } fir.companionObject?.let { builder.classifierBuilder.buildNamedClassOrObjectSymbol(it) }