[FIR] Make FirResolvedDeclarationStatus.modality non nullable

^KT-58764 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-08-30 17:40:33 +03:00
committed by Space Team
parent 8299fffae2
commit 6169834bb3
12 changed files with 20 additions and 30 deletions
@@ -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)
@@ -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 }
@@ -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 {
@@ -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 }
@@ -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 {
@@ -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 {
@@ -86,9 +86,7 @@ object FirOverrideChecker : FirClassChecker() {
overriddenSymbols: List<FirCallableSymbol<*>>,
): 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
}
}
@@ -109,12 +109,12 @@ class FirExpectActualMatchingContextImpl private constructor(
override val ClassLikeSymbolMarker.typeParameters: List<TypeParameterSymbolMarker>
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
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedDeclarationStatus(this, data)
@@ -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
@@ -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) }
@@ -390,7 +390,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(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<FirTreeBuilder>(FirTreeBuild
}
resolvedDeclarationStatus.configure {
+modality(nullable = false)
+effectiveVisibility
shouldBeAnInterface()
}