From 6169834bb3f083d5240952c0bf07a8c541857752 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 30 Aug 2023 17:40:33 +0300 Subject: [PATCH] [FIR] Make FirResolvedDeclarationStatus.modality non nullable ^KT-58764 Fixed --- .../api/fir/symbols/KtFirFunctionSymbol.kt | 2 +- .../api/fir/symbols/KtFirJavaFieldSymbol.kt | 4 ++-- .../fir/symbols/KtFirKotlinPropertySymbol.kt | 2 +- .../fir/symbols/KtFirPropertyGetterSymbol.kt | 2 +- .../fir/symbols/KtFirPropertySetterSymbol.kt | 2 +- .../KtFirSyntheticJavaPropertySymbol.kt | 2 +- .../declaration/FirOverrideChecker.kt | 4 +--- .../mpp/FirExpectActualMatchingContextImpl.kt | 4 ++-- .../FirResolvedDeclarationStatus.kt | 2 +- .../utils/FirSymbolStatusUtils.kt | 19 ++++--------------- .../kotlin/fir/tree/generator/FieldSets.kt | 4 +++- .../fir/tree/generator/NodeConfigurator.kt | 3 ++- 12 files changed, 20 insertions(+), 30 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt index 883acce7597..d2cae73ac65 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt @@ -98,7 +98,7 @@ internal class KtFirFunctionSymbol( } } - override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } context(KtAnalysisSession) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt index c38f5ffb782..bd1d439912f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.declarations.utils.isStatic -import org.jetbrains.kotlin.fir.declarations.utils.modalityOrFinal +import org.jetbrains.kotlin.fir.declarations.utils.modality import org.jetbrains.kotlin.fir.declarations.utils.visibility import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol import org.jetbrains.kotlin.name.CallableId @@ -46,7 +46,7 @@ internal class KtFirJavaFieldSymbol( override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } - override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val isStatic: Boolean get() = withValidityAssertion { firSymbol.isStatic } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt index abbde4f2220..438a8909c7d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt @@ -73,7 +73,7 @@ internal class KtFirKotlinPropertySymbol( } } - override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertyGetterSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertyGetterSymbol.kt index 425e9934992..9b96e79432d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertyGetterSymbol.kt @@ -51,7 +51,7 @@ internal class KtFirPropertyGetterSymbol( override val hasBody: Boolean get() = withValidityAssertion { firSymbol.fir.hasBody } - override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertySetterSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertySetterSymbol.kt index 84e87736282..75827133e30 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertySetterSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirPropertySetterSymbol.kt @@ -65,7 +65,7 @@ internal class KtFirPropertySetterSymbol( override val hasBody: Boolean get() = withValidityAssertion { firSymbol.fir.hasBody } - override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt index 34d5bc3c9d3..15c0072719f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt @@ -51,7 +51,7 @@ internal class KtFirSyntheticJavaPropertySymbol( override val initializer: KtInitializerValue? by cached { firSymbol.getKtConstantInitializer(analysisSession.firResolveSession) } - override val modality: Modality get() = withValidityAssertion { firSymbol.modality ?: firSymbol.invalidModalityError() } + override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt index ceba8de1829..cf9366fdf60 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt @@ -86,9 +86,7 @@ object FirOverrideChecker : FirClassChecker() { overriddenSymbols: List>, ): FirCallableSymbol<*>? { for (overridden in overriddenSymbols) { - val modality = overridden.modality - val isEffectivelyFinal = modality == null || modality == Modality.FINAL - if (isEffectivelyFinal) { + if (overridden.modality == Modality.FINAL) { return overridden } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt index 7605e507dc4..8a0f63a7a1b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt @@ -109,12 +109,12 @@ class FirExpectActualMatchingContextImpl private constructor( override val ClassLikeSymbolMarker.typeParameters: List get() = asSymbol().typeParameterSymbols - override val ClassLikeSymbolMarker.modality: Modality? + override val ClassLikeSymbolMarker.modality: Modality get() = asSymbol().resolvedStatus.modality override val ClassLikeSymbolMarker.visibility: Visibility get() = asSymbol().resolvedStatus.visibility - override val CallableSymbolMarker.modality: Modality? + override val CallableSymbolMarker.modality: Modality get() = asSymbol().resolvedStatus.modality override val CallableSymbolMarker.visibility: Visibility get() = asSymbol().resolvedStatus.visibility diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt index 0c1698f25e6..aeadc675439 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.* interface FirResolvedDeclarationStatus : FirDeclarationStatus { override val source: KtSourceElement? override val visibility: Visibility - override val modality: Modality? override val isExpect: Boolean override val isActual: Boolean override val isOverride: Boolean @@ -40,6 +39,7 @@ interface FirResolvedDeclarationStatus : FirDeclarationStatus { override val isFromEnumClass: Boolean override val isFun: Boolean override val hasStableParameterNames: Boolean + override val modality: Modality val effectiveVisibility: EffectiveVisibility override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedDeclarationStatus(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirSymbolStatusUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirSymbolStatusUtils.kt index 1812a6f62b2..33212119e1c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirSymbolStatusUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirSymbolStatusUtils.kt @@ -10,16 +10,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.* // ---------------------- callables with status ---------------------- -inline val FirCallableSymbol<*>.modality: Modality? get() = resolvedStatus.modality -inline val FirCallableSymbol<*>.modalityOrFinal: Modality get() = modality ?: Modality.FINAL +inline val FirCallableSymbol<*>.modality: Modality get() = resolvedStatus.modality inline val FirCallableSymbol<*>.isAbstract: Boolean get() = resolvedStatus.modality == Modality.ABSTRACT inline val FirCallableSymbol<*>.isOpen: Boolean get() = resolvedStatus.modality == Modality.OPEN -inline val FirCallableSymbol<*>.isFinal: Boolean - get() { - // member with unspecified modality is final - val modality = resolvedStatus.modality ?: return true - return modality == Modality.FINAL - } +inline val FirCallableSymbol<*>.isFinal: Boolean get() = resolvedStatus.modality == Modality.FINAL inline val FirCallableSymbol<*>.visibility: Visibility get() = resolvedStatus.visibility inline val FirCallableSymbol<*>.effectiveVisibility: EffectiveVisibility get() = resolvedStatus.effectiveVisibility @@ -43,14 +37,9 @@ inline val FirCallableSymbol<*>.isFun: Boolean get() = rawStatus.isFun // ---------------------- class like with status ---------------------- -inline val FirClassLikeSymbol<*>.modality: Modality? get() = resolvedStatus.modality +inline val FirClassLikeSymbol<*>.modality: Modality get() = resolvedStatus.modality inline val FirClassLikeSymbol<*>.isAbstract: Boolean get() = resolvedStatus.modality == Modality.ABSTRACT -inline val FirClassLikeSymbol<*>.isFinal: Boolean - get() { - // member with unspecified modality is final - val modality = resolvedStatus.modality ?: return true - return modality == Modality.FINAL - } +inline val FirClassLikeSymbol<*>.isFinal: Boolean get() = resolvedStatus.modality == Modality.FINAL inline val FirClassLikeSymbol<*>.visibility: Visibility get() = resolvedStatus.visibility inline val FirClassLikeSymbol<*>.effectiveVisibility: EffectiveVisibility get() = resolvedStatus.effectiveVisibility diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt index 11dc41275f5..3dab46a7002 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt @@ -80,7 +80,9 @@ object FieldSets { val effectiveVisibility by lazy { field("effectiveVisibility", effectiveVisibilityType) } - val modality by lazy { field(modalityType, nullable = true) } + fun modality(nullable: Boolean): Field { + return field(modalityType, nullable = nullable) + } val scopeProvider by lazy { field("scopeProvider", firScopeProviderType) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 704cae32904..1dd7eb14a2a 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -390,7 +390,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild declarationStatus.configure { +visibility - +modality + +modality(nullable = true) generateBooleanFields( "expect", "actual", "override", "operator", "infix", "inline", "tailRec", "external", "const", "lateInit", "inner", "companion", "data", "suspend", "static", @@ -399,6 +399,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } resolvedDeclarationStatus.configure { + +modality(nullable = false) +effectiveVisibility shouldBeAnInterface() }