From 6c0bacc5484074e5af5412026d9fa782fa3fedef Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 7 Jun 2021 20:46:15 +0200 Subject: [PATCH] [FIR IDE] Fix invalid status for class symbols --- .../symbols/KtFirNamedClassOrObjectSymbol.kt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 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 f610978f6c3..ad80ef37c32 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 @@ -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 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) }