[FIR IDE] Fix invalid status for class symbols
This commit is contained in:
+15
-4
@@ -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) }
|
||||
|
||||
Reference in New Issue
Block a user