diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index 9181684dc1a..2d488761059 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -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(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 KtElement?.convertSafe(): R? = - this?.let { convertElement(it, null)} as? R + this?.let { convertElement(it, null) } as? R private inline fun 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 = emptyList() + additionalAnnotations: List = 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 + ownerTypeParameters: List, ): 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, - containingClassIsExpectClass: Boolean + containingClassIsExpectClass: Boolean, ): Pair?> { var superTypeCallEntry: KtSuperTypeCallEntry? = null val allSuperTypeCallEntries = mutableListOf>() @@ -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 + ownerTypeParameters: List, ): FirConstructor { val target = FirFunctionTarget(labelName = null, isLambda = false) return buildConstructor { @@ -1952,7 +1955,7 @@ open class PsiRawFirBuilder( private fun KtProperty.toFirProperty( ownerRegularOrAnonymousObjectSymbol: FirClassSymbol<*>?, - context: Context + context: Context, ): 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 } }