Extract separate FirResolvePhaseRenderer
This commit is contained in:
+2
-2
@@ -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.FirFieldImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
|
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
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.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
|
||||||
import org.jetbrains.kotlin.fir.resolve.getContainingClass
|
import org.jetbrains.kotlin.fir.resolve.getContainingClass
|
||||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
||||||
@@ -585,7 +585,7 @@ internal class KtSymbolByFirBuilder constructor(
|
|||||||
}
|
}
|
||||||
require(requirement) {
|
require(requirement) {
|
||||||
val renderedSymbol = FirRenderer().with(
|
val renderedSymbol = FirRenderer().with(
|
||||||
declarationRenderer = FirDeclarationRendererWithResolvePhase()
|
resolvePhaseRenderer = FirResolvePhaseRenderer()
|
||||||
).renderElementWithTypeAsString(firSymbol.fir)
|
).renderElementWithTypeAsString(firSymbol.fir)
|
||||||
"Cannot build ${S::class.simpleName} for $renderedSymbol}"
|
"Cannot build ${S::class.simpleName} for $renderedSymbol}"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||||
import org.jetbrains.kotlin.fir.psi
|
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.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration
|
|||||||
|
|
||||||
internal fun FirCallableSymbol<*>.invalidModalityError(): Nothing {
|
internal fun FirCallableSymbol<*>.invalidModalityError(): Nothing {
|
||||||
val rendered = FirRenderer().with(
|
val rendered = FirRenderer().with(
|
||||||
declarationRenderer = FirDeclarationRendererWithResolvePhase()
|
resolvePhaseRenderer = FirResolvePhaseRenderer()
|
||||||
).renderElementWithTypeAsString(fir)
|
).renderElementWithTypeAsString(fir)
|
||||||
error(
|
error(
|
||||||
"""|Symbol modality should not be null, looks like the FIR symbol was not properly resolved
|
"""|Symbol modality should not be null, looks like the FIR symbol was not properly resolved
|
||||||
|
|||||||
+6
-2
@@ -12,8 +12,9 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.realPsi
|
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.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
|
||||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
@@ -52,7 +53,10 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle
|
|||||||
|
|
||||||
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
||||||
val resultBuilder = StringBuilder()
|
val resultBuilder = StringBuilder()
|
||||||
val renderer = FirRenderer(resultBuilder).with(declarationRenderer = FirDeclarationRendererWithAttributesAndResolvePhase())
|
val renderer = FirRenderer(resultBuilder).with(
|
||||||
|
declarationRenderer = FirDeclarationRendererWithAttributes(),
|
||||||
|
resolvePhaseRenderer = FirResolvePhaseRenderer()
|
||||||
|
)
|
||||||
resolveWithClearCaches(ktFile) { firResolveSession ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
check(firResolveSession is LLFirSourceResolveSession)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
val declarationToResolve = firResolveSession
|
val declarationToResolve = firResolveSession
|
||||||
|
|||||||
+2
-2
@@ -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.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
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.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.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotated
|
import org.jetbrains.kotlin.psi.KtAnnotated
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -36,7 +36,7 @@ abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest()
|
|||||||
check(firResolveSession is LLFirSourceResolveSession)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(firResolveSession, place, onAir)
|
val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(firResolveSession, place, onAir)
|
||||||
val rendered = FirRenderer().with(
|
val rendered = FirRenderer().with(
|
||||||
declarationRenderer = FirDeclarationRendererWithResolvePhase()
|
resolvePhaseRenderer = FirResolvePhaseRenderer()
|
||||||
).renderElementAsString(firElement)
|
).renderElementAsString(firElement)
|
||||||
testServices.assertions.assertEqualsToTestDataFileSibling(rendered)
|
testServices.assertions.assertEqualsToTestDataFileSibling(rendered)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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.resolveWithClearCaches
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
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.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
@@ -21,7 +21,7 @@ abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSi
|
|||||||
resolveWithClearCaches(ktFile) { firResolveSession ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
val firFile = ktFile.getOrBuildFirOfType<FirFile>(firResolveSession)
|
val firFile = ktFile.getOrBuildFirOfType<FirFile>(firResolveSession)
|
||||||
val actual = FirRenderer().with(
|
val actual = FirRenderer().with(
|
||||||
declarationRenderer = FirDeclarationRendererWithResolvePhase()
|
resolvePhaseRenderer = FirResolvePhaseRenderer()
|
||||||
).renderElementAsString(firFile)
|
).renderElementAsString(firFile)
|
||||||
testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt")
|
testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,17 +11,15 @@ open class FirDeclarationRenderer {
|
|||||||
|
|
||||||
internal lateinit var components: FirRendererComponents
|
internal lateinit var components: FirRendererComponents
|
||||||
protected val printer get() = components.printer
|
protected val printer get() = components.printer
|
||||||
|
private val resolvePhaseRenderer get() = components.resolvePhaseRenderer
|
||||||
|
|
||||||
fun render(declaration: FirDeclaration) {
|
fun render(declaration: FirDeclaration) {
|
||||||
|
resolvePhaseRenderer?.render(declaration)
|
||||||
with(declaration) {
|
with(declaration) {
|
||||||
renderDeclarationResolvePhase()
|
|
||||||
renderDeclarationAttributes()
|
renderDeclarationAttributes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun FirDeclaration.renderDeclarationResolvePhase() {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun FirDeclaration.renderDeclarationAttributes() {
|
protected open fun FirDeclaration.renderDeclarationAttributes() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-14
@@ -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}] ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -41,6 +41,7 @@ class FirRenderer private constructor(
|
|||||||
private val modifierRenderer: FirModifierRenderer,
|
private val modifierRenderer: FirModifierRenderer,
|
||||||
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
||||||
private val propertyAccessorRenderer: FirPropertyAccessorRenderer?,
|
private val propertyAccessorRenderer: FirPropertyAccessorRenderer?,
|
||||||
|
private val resolvePhaseRenderer: FirResolvePhaseRenderer?,
|
||||||
private val typeRenderer: ConeTypeRenderer,
|
private val typeRenderer: ConeTypeRenderer,
|
||||||
private val valueParameterRenderer: FirValueParameterRenderer,
|
private val valueParameterRenderer: FirValueParameterRenderer,
|
||||||
) : FirPrinter(builder) {
|
) : FirPrinter(builder) {
|
||||||
@@ -58,6 +59,7 @@ class FirRenderer private constructor(
|
|||||||
components.modifierRenderer = modifierRenderer
|
components.modifierRenderer = modifierRenderer
|
||||||
components.packageDirectiveRenderer = packageDirectiveRenderer
|
components.packageDirectiveRenderer = packageDirectiveRenderer
|
||||||
components.propertyAccessorRenderer = propertyAccessorRenderer
|
components.propertyAccessorRenderer = propertyAccessorRenderer
|
||||||
|
components.resolvePhaseRenderer = resolvePhaseRenderer
|
||||||
components.typeRenderer = typeRenderer
|
components.typeRenderer = typeRenderer
|
||||||
components.valueParameterRenderer = valueParameterRenderer
|
components.valueParameterRenderer = valueParameterRenderer
|
||||||
@Suppress("LeakingThis")
|
@Suppress("LeakingThis")
|
||||||
@@ -72,6 +74,7 @@ class FirRenderer private constructor(
|
|||||||
modifierRenderer.components = components
|
modifierRenderer.components = components
|
||||||
packageDirectiveRenderer?.components = components
|
packageDirectiveRenderer?.components = components
|
||||||
propertyAccessorRenderer?.components = components
|
propertyAccessorRenderer?.components = components
|
||||||
|
resolvePhaseRenderer?.components = components
|
||||||
typeRenderer.builder = builder
|
typeRenderer.builder = builder
|
||||||
typeRenderer.idRenderer = idRenderer
|
typeRenderer.idRenderer = idRenderer
|
||||||
valueParameterRenderer.components = components
|
valueParameterRenderer.components = components
|
||||||
@@ -93,6 +96,7 @@ class FirRenderer private constructor(
|
|||||||
FirAllModifierRenderer(),
|
FirAllModifierRenderer(),
|
||||||
packageDirectiveRenderer = null,
|
packageDirectiveRenderer = null,
|
||||||
FirPropertyAccessorRenderer(),
|
FirPropertyAccessorRenderer(),
|
||||||
|
resolvePhaseRenderer = null,
|
||||||
ConeTypeRendererForDebugging(),
|
ConeTypeRendererForDebugging(),
|
||||||
FirValueParameterRenderer(),
|
FirValueParameterRenderer(),
|
||||||
)
|
)
|
||||||
@@ -110,13 +114,15 @@ class FirRenderer private constructor(
|
|||||||
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
||||||
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
||||||
propertyAccessorRenderer: FirPropertyAccessorRenderer? = this.propertyAccessorRenderer,
|
propertyAccessorRenderer: FirPropertyAccessorRenderer? = this.propertyAccessorRenderer,
|
||||||
|
resolvePhaseRenderer: FirResolvePhaseRenderer? = this.resolvePhaseRenderer,
|
||||||
typeRenderer: ConeTypeRenderer = this.typeRenderer,
|
typeRenderer: ConeTypeRenderer = this.typeRenderer,
|
||||||
valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer,
|
valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer,
|
||||||
): FirRenderer = FirRenderer(
|
): FirRenderer = FirRenderer(
|
||||||
builder, FirComponentsImpl(),
|
builder, FirComponentsImpl(),
|
||||||
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
||||||
contractRenderer, declarationRenderer, idRenderer, modifierRenderer,
|
contractRenderer, declarationRenderer, idRenderer, modifierRenderer,
|
||||||
packageDirectiveRenderer, propertyAccessorRenderer, typeRenderer, valueParameterRenderer
|
packageDirectiveRenderer, propertyAccessorRenderer,
|
||||||
|
resolvePhaseRenderer, typeRenderer, valueParameterRenderer
|
||||||
)
|
)
|
||||||
|
|
||||||
fun renderElementAsString(element: FirElement): String {
|
fun renderElementAsString(element: FirElement): String {
|
||||||
@@ -150,6 +156,8 @@ class FirRenderer private constructor(
|
|||||||
|
|
||||||
override var propertyAccessorRenderer: FirPropertyAccessorRenderer? = null
|
override var propertyAccessorRenderer: FirPropertyAccessorRenderer? = null
|
||||||
|
|
||||||
|
override var resolvePhaseRenderer: FirResolvePhaseRenderer? = null
|
||||||
|
|
||||||
override lateinit var callArgumentsRenderer: FirCallArgumentsRenderer
|
override lateinit var callArgumentsRenderer: FirCallArgumentsRenderer
|
||||||
|
|
||||||
override lateinit var classMemberRenderer: FirClassMemberRenderer
|
override lateinit var classMemberRenderer: FirClassMemberRenderer
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ internal interface FirRendererComponents {
|
|||||||
val modifierRenderer: FirModifierRenderer
|
val modifierRenderer: FirModifierRenderer
|
||||||
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
||||||
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
|
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
|
||||||
|
val resolvePhaseRenderer: FirResolvePhaseRenderer?
|
||||||
val typeRenderer: ConeTypeRenderer
|
val typeRenderer: ConeTypeRenderer
|
||||||
val valueParameterRenderer: FirValueParameterRenderer
|
val valueParameterRenderer: FirValueParameterRenderer
|
||||||
}
|
}
|
||||||
+6
-3
@@ -7,8 +7,11 @@ package org.jetbrains.kotlin.fir.renderer
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
|
||||||
class FirDeclarationRendererWithAttributesAndResolvePhase : FirDeclarationRendererWithAttributes() {
|
class FirResolvePhaseRenderer {
|
||||||
override fun FirDeclaration.renderDeclarationResolvePhase() {
|
internal lateinit var components: FirRendererComponents
|
||||||
printer.print("[${resolvePhase}] ")
|
private val printer get() = components.printer
|
||||||
|
|
||||||
|
fun render(declaration: FirDeclaration) {
|
||||||
|
printer.print("[${declaration.resolvePhase}] ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user