From fd74de6ccfff4edb492f253c0e0e7c888531d856 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 13 Feb 2024 20:21:12 +0100 Subject: [PATCH] [LL FIR] drop RawFirReplacement as obsolete --- .../RawFirNonLocalDeclarationBuilder.kt | 97 ++----------------- .../api/fir/lazy/resolve/RawFirReplacement.kt | 53 ---------- 2 files changed, 9 insertions(+), 141 deletions(-) delete mode 100644 analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirReplacement.kt diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt index c0ed8854b67..c48b88ae07b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt @@ -19,13 +19,9 @@ import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder import org.jetbrains.kotlin.fir.builder.buildDestructuringVariable import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isInner -import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirMultiDelegatedConstructorCall import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.scopes.FirScopeProvider -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry @@ -43,8 +39,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( baseScopeProvider: FirScopeProvider, private val originalDeclaration: FirDeclaration, private val declarationToBuild: KtElement, - private val functionsToRebind: Set? = null, - private val replacementApplier: RawFirReplacement.Applier? = null, + private val functionsToRebind: Set, ) : PsiRawFirBuilder(session, baseScopeProvider, bodyBuildingMode = BodyBuildingMode.NORMAL) { companion object { fun buildWithFunctionSymbolRebind( @@ -56,10 +51,10 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( val functionsToRebind = when (val originalDeclaration = designation.target) { is FirFunction -> setOf(originalDeclaration) is FirProperty -> setOfNotNull(originalDeclaration.getter, originalDeclaration.setter) - else -> null + else -> emptySet() } - return build(session, scopeProvider, designation, rootNonLocalDeclaration, functionsToRebind, rebindContainingSymbol = true) + return build(session, scopeProvider, designation, rootNonLocalDeclaration, functionsToRebind) } private fun build( @@ -67,9 +62,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( scopeProvider: FirScopeProvider, designation: FirDesignation, rootNonLocalDeclaration: KtElement, - functionsToRebind: Set? = null, - replacementApplier: RawFirReplacement.Applier? = null, - rebindContainingSymbol: Boolean = false, + functionsToRebind: Set, ): FirDeclaration { check(rootNonLocalDeclaration is KtDeclaration || rootNonLocalDeclaration is KtCodeFragment) @@ -79,14 +72,11 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( originalDeclaration = designation.target as FirDeclaration, declarationToBuild = rootNonLocalDeclaration, functionsToRebind = functionsToRebind, - replacementApplier = replacementApplier ) builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName - if (rebindContainingSymbol) { - @OptIn(PrivateForInline::class) - builder.context.forcedContainerSymbol = designation.target.symbol - } + @OptIn(PrivateForInline::class) + builder.context.forcedContainerSymbol = designation.target.symbol return builder.moveNext(designation.path.iterator(), containingDeclaration = null) } @@ -129,21 +119,17 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( private inner class VisitorWithReplacement(private val containingClass: FirRegularClass?) : Visitor() { fun convertDestructuringDeclaration(element: KtDestructuringDeclaration, containingDeclaration: FirDeclaration?): FirVariable { - val replacementDeclaration = replacementApplier?.tryReplace(element) ?: element - requireIsInstance(replacementDeclaration) return if (containingDeclaration is FirScript) { withContainerSymbol(containingDeclaration.symbol) { // Annotations from script destructuring declarations are linked to the script itself - buildScriptDestructuringDeclaration(replacementDeclaration) + buildScriptDestructuringDeclaration(element) } } else { - buildErrorTopLevelDestructuringDeclaration(replacementDeclaration.toFirSourceElement()) + buildErrorTopLevelDestructuringDeclaration(element.toFirSourceElement()) } } fun convertDestructuringDeclarationEntry(element: KtDestructuringDeclarationEntry): FirVariable { - val replacementDeclaration = replacementApplier?.tryReplace(element) ?: element - requireIsInstance(replacementDeclaration) requireIsInstance(originalDeclaration) val container = originalDeclaration.destructuringDeclarationContainerVariable?.fir @@ -170,72 +156,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( } fun convertAnonymousInitializer(element: KtAnonymousInitializer, containingDeclaration: FirDeclaration?): FirAnonymousInitializer { - val replacementDeclaration = replacementApplier?.tryReplace(element) ?: element - requireIsInstance(replacementDeclaration) - return buildAnonymousInitializer(replacementDeclaration, containingDeclaration?.symbol) - } - - override fun convertElement(element: KtElement, original: FirElement?): FirElement? = - super.convertElement(replacementApplier?.tryReplace(element) ?: element, original) - - override fun convertProperty( - property: KtProperty, - ownerRegularOrAnonymousObjectSymbol: FirClassSymbol<*>?, - ownerRegularClassTypeParametersCount: Int?, - ): FirProperty { - val replacementProperty = replacementApplier?.tryReplace(property) ?: property - check(replacementProperty is KtProperty) - return super.convertProperty( - property = replacementProperty, - ownerRegularOrAnonymousObjectSymbol = ownerRegularOrAnonymousObjectSymbol, - ownerRegularClassTypeParametersCount = ownerRegularClassTypeParametersCount - ) - } - - override fun convertPropertyAccessor( - accessor: KtPropertyAccessor?, - property: KtProperty, - propertyTypeRef: FirTypeRef, - propertySymbol: FirPropertySymbol, - isGetter: Boolean, - accessorAnnotationsFromProperty: List, - parameterAnnotationsFromProperty: List, - ): FirPropertyAccessor? { - val replacementAccessor = if (accessor != null) { - val replacementAccessor = replacementApplier?.tryReplace(accessor) ?: accessor - check(replacementAccessor is KtPropertyAccessor) - replacementAccessor - } else { - accessor - } - - return super.convertPropertyAccessor( - replacementAccessor, - property, - propertyTypeRef, - propertySymbol, - isGetter, - accessorAnnotationsFromProperty, - parameterAnnotationsFromProperty - ) - } - - override fun convertValueParameter( - valueParameter: KtParameter, - functionSymbol: FirFunctionSymbol<*>, - defaultTypeRef: FirTypeRef?, - valueParameterDeclaration: ValueParameterDeclaration, - additionalAnnotations: List, - ): FirValueParameter { - val replacementParameter = replacementApplier?.tryReplace(valueParameter) ?: valueParameter - check(replacementParameter is KtParameter) - return super.convertValueParameter( - valueParameter = replacementParameter, - functionSymbol = functionSymbol, - defaultTypeRef = defaultTypeRef, - valueParameterDeclaration = valueParameterDeclaration, - additionalAnnotations = additionalAnnotations - ) + return buildAnonymousInitializer(element, containingDeclaration?.symbol) } private fun extractContructorConversionParams( diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirReplacement.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirReplacement.kt deleted file mode 100644 index 40583fabfcf..00000000000 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirReplacement.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve - -import org.jetbrains.kotlin.psi.* - -internal data class RawFirReplacement(val from: KtElement, val to: KtElement) { - companion object { - fun isApplicableForReplacement(element: KtElement) = when (element) { - is KtFile, is KtScript, is KtClassInitializer, is KtPropertyAccessor, is KtConstructor<*>, is KtClassOrObject, is KtObjectLiteralExpression, is KtTypeAlias, - is KtNamedFunction, is KtLambdaExpression, is KtAnonymousInitializer, is KtProperty, is KtTypeReference, - is KtAnnotationEntry, is KtTypeParameter, is KtTypeProjection, is KtParameter, is KtBlockExpression, - is KtSimpleNameExpression, is KtConstantExpression, is KtStringTemplateExpression, is KtReturnExpression, - is KtTryExpression, is KtIfExpression, is KtWhenExpression, is KtDoWhileExpression, is KtWhileExpression, - is KtForExpression, is KtBreakExpression, is KtContinueExpression, is KtBinaryExpression, is KtBinaryExpressionWithTypeRHS, - is KtIsExpression, is KtUnaryExpression, is KtCallExpression, is KtArrayAccessExpression, is KtQualifiedExpression, - is KtThisExpression, is KtSuperExpression, is KtParenthesizedExpression, is KtLabeledExpression, is KtAnnotatedExpression, - is KtThrowExpression, is KtDestructuringDeclaration, is KtClassLiteralExpression, is KtCallableReferenceExpression, - is KtCollectionLiteralExpression, - -> true - else -> false - } - } - - inner class Applier { - private var replacementApplied = false - - private fun ensureReplacementIsValid() { - require(from == to || isApplicableForReplacement(from)) { - "Replacement is possible for applicable type but given ${from::class.simpleName}" - } - require(from::class == to::class) { - "Replacement is possible for same type in replacements but given\n${from::class.simpleName} and ${to::class.simpleName}" - } - } - - fun tryReplace(element: KtElement): KtElement { - if (from != element) return element - ensureReplacementIsValid() - replacementApplied = true - return to - } - - fun ensureApplied() { - check(from == to || replacementApplied) { - "Replacement requested but was not applied for ${from::class.simpleName}" - } - } - } -} \ No newline at end of file