diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt index d31ad5f1e64..fd4ae8c8d95 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt @@ -27,8 +27,8 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef import org.jetbrains.kotlin.fir.java.declarations.FirJavaField -import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer import org.jetbrains.kotlin.fir.resolve.getContainingClass import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable @@ -585,7 +585,7 @@ internal class KtSymbolByFirBuilder constructor( } require(requirement) { val renderedSymbol = FirRenderer().with( - declarationRenderer = FirDeclarationRendererWithResolvePhase() + resolvePhaseRenderer = FirResolvePhaseRenderer() ).renderElementWithTypeAsString(firSymbol.fir) "Cannot build ${S::class.simpleName} for $renderedSymbol}" } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt index 74083232c58..b260d6e9c8c 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt @@ -21,8 +21,8 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner import org.jetbrains.kotlin.fir.psi -import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ensureResolved import org.jetbrains.kotlin.fir.symbols.impl.* @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration internal fun FirCallableSymbol<*>.invalidModalityError(): Nothing { val rendered = FirRenderer().with( - declarationRenderer = FirDeclarationRendererWithResolvePhase() + resolvePhaseRenderer = FirResolvePhaseRenderer() ).renderElementWithTypeAsString(fir) error( """|Symbol modality should not be null, looks like the FIR symbol was not properly resolved diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt index aee2bdad628..90c6636394f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt @@ -12,8 +12,9 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.realPsi -import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributesAndResolvePhase +import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributes import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer import org.jetbrains.kotlin.fir.symbols.ensureResolved import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.psi.KtDeclaration @@ -52,7 +53,10 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { val resultBuilder = StringBuilder() - val renderer = FirRenderer(resultBuilder).with(declarationRenderer = FirDeclarationRendererWithAttributesAndResolvePhase()) + val renderer = FirRenderer(resultBuilder).with( + declarationRenderer = FirDeclarationRendererWithAttributes(), + resolvePhaseRenderer = FirResolvePhaseRenderer() + ) resolveWithClearCaches(ktFile) { firResolveSession -> check(firResolveSession is LLFirSourceResolveSession) val declarationToResolve = firResolveSession diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt index b342ba5cfc5..8392f37068b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest -import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer import org.jetbrains.kotlin.psi.KtAnnotated import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile @@ -36,7 +36,7 @@ abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest() check(firResolveSession is LLFirSourceResolveSession) val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(firResolveSession, place, onAir) val rendered = FirRenderer().with( - declarationRenderer = FirDeclarationRendererWithResolvePhase() + resolvePhaseRenderer = FirResolvePhaseRenderer() ).renderElementAsString(firElement) testServices.assertions.assertEqualsToTestDataFileSibling(rendered) } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractInnerDeclarationsResolvePhaseTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractInnerDeclarationsResolvePhaseTest.kt index c5a139b2915..4639a8268c2 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractInnerDeclarationsResolvePhaseTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractInnerDeclarationsResolvePhaseTest.kt @@ -9,8 +9,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithClearCaches import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices @@ -21,7 +21,7 @@ abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSi resolveWithClearCaches(ktFile) { firResolveSession -> val firFile = ktFile.getOrBuildFirOfType(firResolveSession) val actual = FirRenderer().with( - declarationRenderer = FirDeclarationRendererWithResolvePhase() + resolvePhaseRenderer = FirResolvePhaseRenderer() ).renderElementAsString(firFile) testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt") } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt index 718ef18cd30..4cf68939fe3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt @@ -11,17 +11,15 @@ open class FirDeclarationRenderer { internal lateinit var components: FirRendererComponents protected val printer get() = components.printer + private val resolvePhaseRenderer get() = components.resolvePhaseRenderer fun render(declaration: FirDeclaration) { + resolvePhaseRenderer?.render(declaration) with(declaration) { - renderDeclarationResolvePhase() renderDeclarationAttributes() } } - protected open fun FirDeclaration.renderDeclarationResolvePhase() { - } - protected open fun FirDeclaration.renderDeclarationAttributes() { } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithResolvePhase.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithResolvePhase.kt deleted file mode 100644 index 3ccc6f35463..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithResolvePhase.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2010-2022 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.fir.renderer - -import org.jetbrains.kotlin.fir.declarations.FirDeclaration - -class FirDeclarationRendererWithResolvePhase : FirDeclarationRenderer() { - override fun FirDeclaration.renderDeclarationResolvePhase() { - printer.print("[${resolvePhase}] ") - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index b452cd7cee0..027959a684d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -41,6 +41,7 @@ class FirRenderer private constructor( private val modifierRenderer: FirModifierRenderer, private val packageDirectiveRenderer: FirPackageDirectiveRenderer?, private val propertyAccessorRenderer: FirPropertyAccessorRenderer?, + private val resolvePhaseRenderer: FirResolvePhaseRenderer?, private val typeRenderer: ConeTypeRenderer, private val valueParameterRenderer: FirValueParameterRenderer, ) : FirPrinter(builder) { @@ -58,6 +59,7 @@ class FirRenderer private constructor( components.modifierRenderer = modifierRenderer components.packageDirectiveRenderer = packageDirectiveRenderer components.propertyAccessorRenderer = propertyAccessorRenderer + components.resolvePhaseRenderer = resolvePhaseRenderer components.typeRenderer = typeRenderer components.valueParameterRenderer = valueParameterRenderer @Suppress("LeakingThis") @@ -72,6 +74,7 @@ class FirRenderer private constructor( modifierRenderer.components = components packageDirectiveRenderer?.components = components propertyAccessorRenderer?.components = components + resolvePhaseRenderer?.components = components typeRenderer.builder = builder typeRenderer.idRenderer = idRenderer valueParameterRenderer.components = components @@ -93,6 +96,7 @@ class FirRenderer private constructor( FirAllModifierRenderer(), packageDirectiveRenderer = null, FirPropertyAccessorRenderer(), + resolvePhaseRenderer = null, ConeTypeRendererForDebugging(), FirValueParameterRenderer(), ) @@ -110,13 +114,15 @@ class FirRenderer private constructor( modifierRenderer: FirModifierRenderer = this.modifierRenderer, packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer, propertyAccessorRenderer: FirPropertyAccessorRenderer? = this.propertyAccessorRenderer, + resolvePhaseRenderer: FirResolvePhaseRenderer? = this.resolvePhaseRenderer, typeRenderer: ConeTypeRenderer = this.typeRenderer, valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer, ): FirRenderer = FirRenderer( builder, FirComponentsImpl(), annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer, contractRenderer, declarationRenderer, idRenderer, modifierRenderer, - packageDirectiveRenderer, propertyAccessorRenderer, typeRenderer, valueParameterRenderer + packageDirectiveRenderer, propertyAccessorRenderer, + resolvePhaseRenderer, typeRenderer, valueParameterRenderer ) fun renderElementAsString(element: FirElement): String { @@ -150,6 +156,8 @@ class FirRenderer private constructor( override var propertyAccessorRenderer: FirPropertyAccessorRenderer? = null + override var resolvePhaseRenderer: FirResolvePhaseRenderer? = null + override lateinit var callArgumentsRenderer: FirCallArgumentsRenderer override lateinit var classMemberRenderer: FirClassMemberRenderer diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt index 390c8ff9a7c..44191f48c54 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt @@ -20,6 +20,7 @@ internal interface FirRendererComponents { val modifierRenderer: FirModifierRenderer val packageDirectiveRenderer: FirPackageDirectiveRenderer? val propertyAccessorRenderer: FirPropertyAccessorRenderer? + val resolvePhaseRenderer: FirResolvePhaseRenderer? val typeRenderer: ConeTypeRenderer val valueParameterRenderer: FirValueParameterRenderer } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithAttributesAndResolvePhase.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvePhaseRenderer.kt similarity index 56% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithAttributesAndResolvePhase.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvePhaseRenderer.kt index de9719a4791..d45cb13771a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRendererWithAttributesAndResolvePhase.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvePhaseRenderer.kt @@ -7,8 +7,11 @@ package org.jetbrains.kotlin.fir.renderer import org.jetbrains.kotlin.fir.declarations.FirDeclaration -class FirDeclarationRendererWithAttributesAndResolvePhase : FirDeclarationRendererWithAttributes() { - override fun FirDeclaration.renderDeclarationResolvePhase() { - printer.print("[${resolvePhase}] ") +class FirResolvePhaseRenderer { + internal lateinit var components: FirRendererComponents + private val printer get() = components.printer + + fun render(declaration: FirDeclaration) { + printer.print("[${declaration.resolvePhase}] ") } } \ No newline at end of file