From 9130392eb96f8261aaa7584136ed37c67419f89a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 2 Sep 2020 22:42:07 +0300 Subject: [PATCH] FIR IDE: resolve symbol to status to get it modality --- .../frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt | 2 +- .../idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt | 2 +- .../idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt | 2 +- .../frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt | 2 +- .../frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt | 3 ++- .../idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt | 2 +- .../idea/frontend/api/fir/symbols/firSymbolUtils.kt | 8 +++++++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt index a915548a74c..9f62a147930 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt @@ -38,7 +38,7 @@ internal class KtFirClassOrObjectSymbol( fir.symbol.classId.takeUnless { it.isLocal } } - override val modality: KtSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtSymbolModality get() = getModality() override val typeParameters by firRef.withFirAndCache { fir.typeParameters.map { typeParameter -> diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt index 3dd442a4b5b..98898f4709c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt @@ -64,7 +64,7 @@ internal class KtFirFunctionSymbol( else -> KtSymbolKind.MEMBER } } - override val modality: KtCommonSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtCommonSymbolModality get() = getModality() override fun createPointer(): KtSymbolPointer { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt index 5db1b2b939b..cedf217926f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt @@ -44,7 +44,7 @@ internal class KtFirJavaFieldSymbol( fir.symbol.callableId.asFqNameForDebugInfo() // todo check if local } - override val modality: KtCommonSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtCommonSymbolModality get() = getModality() override fun createPointer(): KtSymbolPointer { TODO("Creating pointers for java fields is not supported yet") diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt index b57eec4a773..eb3d47fdaa7 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt @@ -36,7 +36,7 @@ internal class KtFirPropertyGetterSymbol( override val isDefault: Boolean get() = firRef.withFir { it is FirDefaultPropertyAccessor } override val type: KtType = firRef.withFir(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { builder.buildKtType(it.returnTypeRef) } - override val modality: KtCommonSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() } override fun createPointer(): KtSymbolPointer { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt index 96bc6ccfdfc..d5ca5ea1ac5 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.idea.fir.findPsi @@ -35,7 +36,7 @@ internal class KtFirPropertySetterSymbol( override val psi: PsiElement? by firRef.withFirAndCache { it.findPsi(fir.session) } override val isDefault: Boolean get() = firRef.withFir { it is FirDefaultPropertyAccessor } - override val modality: KtCommonSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() } override val parameter: KtSetterParameterSymbol by firRef.withFirAndCache { fir -> builder.buildFirSetterParameter(fir.valueParameters.single()) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt index 9bb9fdb7cb2..6973ef1c620 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt @@ -53,7 +53,7 @@ internal class KtFirPropertySymbol( else -> KtSymbolKind.MEMBER } } - override val modality: KtCommonSymbolModality get() = firRef.withFir { it.modality.getSymbolModality() } + override val modality: KtCommonSymbolModality get() = getModality() override val callableIdIfNonLocal: FqName? get() = firRef.withFir { fir -> diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt index f2c68ed2663..d9644ea7b9e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt @@ -6,6 +6,9 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolModality @@ -17,4 +20,7 @@ internal inline fun Modality?.getSymbolModality() Modality.ABSTRACT -> KtCommonSymbolModality.ABSTRACT Modality.SEALED -> KtSymbolModality.SEALED null -> error("Symbol modality should not be null, looks like the fir symbol was not properly resolved") -} as? M ?: error("Sealed modality can only be applied to class") \ No newline at end of file +} as? M ?: error("Sealed modality can only be applied to class") + +internal inline fun KtFirSymbol.getModality() = + firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() } \ No newline at end of file