[FIR] Make FirDeclaration an abstract class

This commit is contained in:
Dmitriy Novozhilov
2021-06-20 15:23:25 +03:00
parent b3e5c6e079
commit 1324e9223f
142 changed files with 997 additions and 758 deletions
@@ -184,7 +184,7 @@ private object FirToKtConversionCreator {
KtClassLikeSymbol::class.createType(),
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirRegularClass")
),
FirMemberDeclaration::class to HLFunctionCallConversion(
FirStatusOwner::class to HLFunctionCallConversion(
"firSymbolBuilder.buildSymbol({0} as FirDeclaration<*>)",
KtSymbol::class.createType(),
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration")
@@ -196,7 +196,7 @@ internal val KtType.nullabilityType: NullabilityType
} ?: NullabilityType.Unknown
internal fun FirMemberDeclaration<*>.computeSimpleModality(): Set<String> {
internal fun FirStatusOwner.computeSimpleModality(): Set<String> {
require(this !is FirConstructor)
val modifier = when (modality) {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirStatusOwner
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue
import org.jetbrains.kotlin.fir.visibilityChecker
@@ -55,8 +55,8 @@ internal class KtFirVisibilityChecker(
?.let { ExpressionReceiverValue(it) }
candidateSymbol.firRef.withFir { candidateFirSymbol ->
require(candidateFirSymbol is FirMemberDeclaration) {
"$candidateFirSymbol must be a FirMemberDeclaration and FirSymbolOwner; it were ${candidateFirSymbol::class} instead"
require(candidateFirSymbol is FirStatusOwner) {
"$candidateFirSymbol must be a FirStatusOwner and FirSymbolOwner; it were ${candidateFirSymbol::class} instead"
}
rootModuleSession.visibilityChecker.isVisible(
@@ -109,7 +109,7 @@ internal class FirIdeRenderer private constructor(
renderModifier(RendererModifier.MODALITY in options.modifiers, modality.name.toLowerCaseAsciiOnly())
}
private fun FirMemberDeclaration<*>.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration<*>?): Modality {
private fun FirStatusOwner.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration<*>?): Modality {
if (this is FirRegularClass) {
return if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
}
@@ -148,13 +148,13 @@ internal class FirIdeRenderer private constructor(
}
}
private fun StringBuilder.renderMemberModifiers(declaration: FirMemberDeclaration<*>) {
private fun StringBuilder.renderMemberModifiers(declaration: FirStatusOwner) {
renderModifier(declaration.isExternal, "external")
renderModifier(RendererModifier.EXPECT in options.modifiers && declaration.isExpect, "expect")
renderModifier(RendererModifier.ACTUAL in options.modifiers && declaration.isActual, "actual")
}
private fun StringBuilder.renderAdditionalModifiers(firMember: FirMemberDeclaration<*>) {
private fun StringBuilder.renderAdditionalModifiers(firMember: FirStatusOwner) {
val isOperator =
firMember.isOperator//TODO make similar to functionDescriptor.overriddenDescriptors.none { it.isOperator }
val isInfix =
@@ -167,7 +167,7 @@ internal class FirIdeRenderer private constructor(
renderModifier(RendererModifier.OPERATOR in options.modifiers && isOperator, "operator")
}
private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirMemberDeclaration<*>) {
private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirStatusOwner) {
renderModifier(functionDescriptor.isSuspend, "suspend")
}
@@ -15,16 +15,16 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.psi.KtDeclaration
internal fun KtFirSymbol<FirMemberDeclaration<*>>.getModality(
internal fun <F> KtFirSymbol<F>.getModality(
phase: FirResolvePhase = FirResolvePhase.STATUS,
defaultModality: Modality? = null
) =
firRef.withFir(phase) { fir ->
): Modality where F : FirDeclaration<*>, F : FirStatusOwner {
return firRef.withFir(phase) { fir ->
fir.modality
?: defaultModality
?: fir.invalidModalityError()
}
}
private fun FirDeclaration<*>.invalidModalityError(): Nothing {
error(
@@ -37,7 +37,9 @@ private fun FirDeclaration<*>.invalidModalityError(): Nothing {
}
internal fun <F : FirMemberDeclaration<F>> KtFirSymbol<F>.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility =
internal fun <F> KtFirSymbol<F>.getVisibility(
phase: FirResolvePhase = FirResolvePhase.STATUS
): Visibility where F : FirStatusOwner, F : FirDeclaration<*> =
firRef.withFir(phase) { fir -> fir.visibility }
internal fun KtFirSymbol<FirCallableDeclaration<*>>.getCallableIdIfNonLocal(): CallableId? =