[FIR] PsiRawFirBuilder: cleanup code

^KT-63042
This commit is contained in:
Dmitrii Gridin
2023-11-14 15:19:31 +01:00
committed by Space Team
parent 580c2a490d
commit 41998ae8ae
@@ -56,7 +56,7 @@ import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
open class PsiRawFirBuilder(
session: FirSession,
val baseScopeProvider: FirScopeProvider,
bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL
bodyBuildingMode: BodyBuildingMode = BodyBuildingMode.NORMAL,
) : AbstractRawFirBuilder<PsiElement>(session) {
protected open fun bindFunctionTarget(target: FirFunctionTarget, function: FirFunction) = target.bind(function)
protected open fun FirFunctionBuilder.additionalFunctionInit() {}
@@ -139,7 +139,7 @@ open class PsiRawFirBuilder(
get() = (this as? KtArrayAccessExpression)?.indexExpressions
override val PsiElement.isVararg: Boolean
get() = (this as? KtParameter)?.isVarArg ?: false
get() = (this as? KtParameter)?.isVarArg == true
private val KtModifierListOwner.visibility: Visibility
get() = with(modifierList) {
@@ -184,7 +184,7 @@ open class PsiRawFirBuilder(
}
private inline fun <reified R : FirElement> KtElement?.convertSafe(): R? =
this?.let { convertElement(it, null)} as? R
this?.let { convertElement(it, null) } as? R
private inline fun <reified R : FirElement> KtElement.convert(): R =
convertElement(this, null) as R
@@ -200,11 +200,11 @@ open class PsiRawFirBuilder(
sourceElement: KtSourceElement?,
buildExpression: () -> FirExpression,
): FirExpression {
return buildOrLazy(buildExpression, {
return buildOrLazy(buildExpression) {
buildLazyExpression {
source = sourceElement
}
})
}
}
private inline fun buildOrLazyBlock(buildBlock: () -> FirBlock): FirBlock {
@@ -214,9 +214,9 @@ open class PsiRawFirBuilder(
private inline fun buildOrLazyDelegatedConstructorCall(
isThis: Boolean,
constructedTypeRef: FirTypeRef,
buildCall: () -> FirDelegatedConstructorCall
buildCall: () -> FirDelegatedConstructorCall,
): FirDelegatedConstructorCall {
return buildOrLazy(buildCall, {
return buildOrLazy(buildCall) {
buildLazyDelegatedConstructorCall {
this.isThis = isThis
this.constructedTypeRef = constructedTypeRef
@@ -231,7 +231,7 @@ open class PsiRawFirBuilder(
}
}
}
})
}
}
open fun convertElement(element: KtElement, original: FirElement? = null): FirElement? =
@@ -239,7 +239,7 @@ open class PsiRawFirBuilder(
open fun convertProperty(
property: KtProperty, ownerRegularOrAnonymousObjectSymbol: FirClassSymbol<*>?,
ownerRegularClassTypeParametersCount: Int?
ownerRegularClassTypeParametersCount: Int?,
): FirProperty = property.toFirProperty(
ownerRegularOrAnonymousObjectSymbol,
context
@@ -267,7 +267,7 @@ open class PsiRawFirBuilder(
functionSymbol: FirFunctionSymbol<*>,
defaultTypeRef: FirTypeRef? = null,
valueParameterDeclaration: ValueParameterDeclaration,
additionalAnnotations: List<FirAnnotation> = emptyList()
additionalAnnotations: List<FirAnnotation> = emptyList(),
): FirValueParameter =
valueParameter.toFirValueParameter(defaultTypeRef, functionSymbol, valueParameterDeclaration, additionalAnnotations)
@@ -292,7 +292,7 @@ open class PsiRawFirBuilder(
private fun KtElement?.toFirExpression(
errorReason: String,
kind: DiagnosticKind = DiagnosticKind.ExpressionExpected
kind: DiagnosticKind = DiagnosticKind.ExpressionExpected,
): FirExpression = toFirExpression { ConeSimpleDiagnostic(errorReason, kind) }
private inline fun KtElement?.toFirExpression(
@@ -362,7 +362,7 @@ open class PsiRawFirBuilder(
delegatedSelfType: FirResolvedTypeRef,
owner: KtClassOrObject,
ownerClassBuilder: FirClassBuilder,
ownerTypeParameters: List<FirTypeParameterRef>
ownerTypeParameters: List<FirTypeParameterRef>,
): FirDeclaration {
return when (this) {
is KtSecondaryConstructor -> {
@@ -668,7 +668,7 @@ open class PsiRawFirBuilder(
this.name = name
symbol = FirValueParameterSymbol(name)
defaultValue = if (hasDefaultValue()) {
buildOrLazyExpression(null, { { this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value") })
buildOrLazyExpression(null) { { this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value") }
} else null
isCrossinline = hasModifier(CROSSINLINE_KEYWORD)
isNoinline = hasModifier(NOINLINE_KEYWORD)
@@ -810,7 +810,7 @@ open class PsiRawFirBuilder(
private fun KtTypeParameterListOwner.extractTypeParametersTo(
container: FirTypeParameterRefsOwnerBuilder,
declarationSymbol: FirBasedSymbol<*>
declarationSymbol: FirBasedSymbol<*>,
) {
for (typeParameter in typeParameters) {
container.typeParameters += extractTypeParameter(typeParameter, declarationSymbol)
@@ -819,7 +819,7 @@ open class PsiRawFirBuilder(
private fun KtTypeParameterListOwner.extractTypeParametersTo(
container: FirTypeParametersOwnerBuilder,
declarationSymbol: FirBasedSymbol<*>
declarationSymbol: FirBasedSymbol<*>,
) {
for (typeParameter in typeParameters) {
container.typeParameters += extractTypeParameter(typeParameter, declarationSymbol)
@@ -953,7 +953,7 @@ open class PsiRawFirBuilder(
delegatedEnumSuperTypeRef: FirTypeRef?,
classKind: ClassKind,
containerTypeParameters: List<FirTypeParameterRef>,
containingClassIsExpectClass: Boolean
containingClassIsExpectClass: Boolean,
): Pair<FirTypeRef, Map<Int, FirFieldSymbol>?> {
var superTypeCallEntry: KtSuperTypeCallEntry? = null
val allSuperTypeCallEntries = mutableListOf<Pair<KtSuperTypeCallEntry, FirTypeRef>>()
@@ -1022,12 +1022,10 @@ open class PsiRawFirBuilder(
// We are never here as part of enum entry
val shouldGenerateImplicitPrimaryConstructor =
!hasSecondaryConstructors() &&
!(containingClassIsExpectClass && classKind != ClassKind.ENUM_CLASS) &&
(this !is KtClass || !this.isInterface())
!(containingClassIsExpectClass && classKind != ClassKind.ENUM_CLASS) &&
(this !is KtClass || !this.isInterface())
val hasPrimaryConstructor = primaryConstructor != null || shouldGenerateImplicitPrimaryConstructor
if (hasPrimaryConstructor || superTypeCallEntry != null) {
val firPrimaryConstructor = primaryConstructor.toFirConstructor(
superTypeCallEntry,
@@ -1043,6 +1041,7 @@ open class PsiRawFirBuilder(
)
container.declarations += firPrimaryConstructor
}
delegateFieldsMap.values.mapTo(container.declarations) { it.fir }
return delegatedSuperTypeRef!! to delegateFieldsMap.takeIf { it.isNotEmpty() }
}
@@ -1064,6 +1063,7 @@ open class PsiRawFirBuilder(
): FirConstructor {
val constructorSource = this?.toFirSourceElement()
?: owner.toKtPsiSourceElement(KtFakeSourceElementKind.ImplicitConstructor)
fun buildDelegatedCall(superTypeCallEntry: KtSuperTypeCallEntry?, delegatedTypeRef: FirTypeRef): FirDelegatedConstructorCall? {
val constructorCall = superTypeCallEntry?.toFirSourceElement()
val constructedTypeRef = if (copyConstructedTypeRefWithImplicitSource) {
@@ -1086,6 +1086,7 @@ open class PsiRawFirBuilder(
}
}
}
val firDelegatedCall = runUnless(containingClassIsExpectClass) {
if (allSuperTypeCallEntries.size <= 1) {
buildDelegatedCall(superTypeCallEntry, delegatedSuperTypeRef!!)
@@ -1109,7 +1110,9 @@ open class PsiRawFirBuilder(
val status = FirDeclarationStatusImpl(explicitVisibility ?: defaultVisibility(), Modality.FINAL).apply {
isExpect = this@toFirConstructor?.hasExpectModifier() == true || this@PsiRawFirBuilder.context.containerIsExpect
isActual = this@toFirConstructor?.hasActualModifier() == true || isImplicitlyActual
isInner = owner.parent.parent !is KtScript && owner.hasModifier(INNER_KEYWORD) // a warning about inner script class is reported on the class itself
// a warning about inner script class is reported on the class itself
isInner = owner.parent.parent !is KtScript && owner.hasModifier(INNER_KEYWORD)
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
isFromEnumClass = owner.hasModifier(ENUM_KEYWORD)
}
@@ -1293,7 +1296,7 @@ open class PsiRawFirBuilder(
protected fun KtEnumEntry.toFirEnumEntry(
delegatedEnumSelfTypeRef: FirResolvedTypeRef,
ownerClassHasDefaultConstructor: Boolean
ownerClassHasDefaultConstructor: Boolean,
): FirDeclaration {
val ktEnumEntry = this@toFirEnumEntry
val containingClassIsExpectClass = hasExpectModifier() || this@PsiRawFirBuilder.context.containerIsExpect
@@ -1865,7 +1868,7 @@ open class PsiRawFirBuilder(
delegatedTypeRef: FirTypeRef,
selfTypeRef: FirTypeRef,
owner: KtClassOrObject,
ownerTypeParameters: List<FirTypeParameterRef>
ownerTypeParameters: List<FirTypeParameterRef>,
): FirConstructor {
val target = FirFunctionTarget(labelName = null, isLambda = false)
return buildConstructor {
@@ -1952,7 +1955,7 @@ open class PsiRawFirBuilder(
private fun <T> KtProperty.toFirProperty(
ownerRegularOrAnonymousObjectSymbol: FirClassSymbol<*>?,
context: Context<T>
context: Context<T>,
): FirProperty {
val propertyType = typeReference.toFirOrImplicitType()
val propertyName = nameAsSafeName
@@ -2504,10 +2507,10 @@ open class PsiRawFirBuilder(
source = entrySource
condition =
if (entry.conditions.size == 1 && ktCondition is KtWhenConditionWithExpression) {
(ktCondition.expression ?: ktCondition).toFirExpression(
"No expression in condition with expression",
DiagnosticKind.ExpressionExpected,
)
(ktCondition.expression ?: ktCondition).toFirExpression(
"No expression in condition with expression",
DiagnosticKind.ExpressionExpected,
)
} else {
buildBalancedOrExpressionTree(entry.conditions.map { condition ->
if (condition is KtWhenConditionWithExpression) {
@@ -2561,7 +2564,7 @@ open class PsiRawFirBuilder(
if (parent is KtBlockExpression) return false
when (parent.elementType) {
KtNodeTypes.THEN, KtNodeTypes.ELSE, KtNodeTypes.WHEN_ENTRY -> {
return (parent.parent as? KtExpression)?.usedAsExpression ?: true
return (parent.parent as? KtExpression)?.usedAsExpression != false
}
}
if (parent is KtScriptInitializer) return false
@@ -3092,13 +3095,12 @@ enum class BodyBuildingMode {
NORMAL,
/**
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock] for function bodies, constructors & getters/setters
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyExpression] for property initializers
* Build [FirLazyBlock] for function bodies, constructors & getters/setters
* Build [FirLazyExpression] for property initializers
*/
LAZY_BODIES;
companion object {
fun lazyBodies(lazyBodies: Boolean): BodyBuildingMode =
if (lazyBodies) LAZY_BODIES else NORMAL
fun lazyBodies(lazyBodies: Boolean): BodyBuildingMode = if (lazyBodies) LAZY_BODIES else NORMAL
}
}