FirRenderer: partially get rid of RenderMode

This commit is contained in:
Mikhail Glukhikh
2022-07-06 17:03:09 +02:00
committed by Space
parent 9890066b72
commit 7c27e6f843
29 changed files with 254 additions and 169 deletions
@@ -39,26 +39,26 @@ fun CFGNode<*>.render(): String =
is LoopConditionExitNode -> "Exit loop condition"
is LoopExitNode -> "Exit ${fir.type()}loop"
is QualifiedAccessNode -> "Access variable ${fir.calleeReference.render(CfgRenderMode)}"
is QualifiedAccessNode -> "Access variable ${CfgRenderer.renderElementAsString(fir.calleeReference)}"
is ResolvedQualifierNode -> "Access qualifier ${fir.classId}"
is ComparisonExpressionNode -> "Comparison ${fir.operation.operator}"
is TypeOperatorCallNode -> "Type operator: \"${fir.render(CfgRenderMode)}\""
is TypeOperatorCallNode -> "Type operator: \"${CfgRenderer.renderElementAsString(fir)}\""
is EqualityOperatorCallNode -> "Equality operator ${fir.operation.operator}"
is JumpNode -> "Jump: ${fir.render()}"
is StubNode -> "Stub"
is CheckNotNullCallNode -> "Check not null: ${fir.render(CfgRenderMode)}"
is CheckNotNullCallNode -> "Check not null: ${CfgRenderer.renderElementAsString(fir)}"
is ConstExpressionNode -> "Const: ${fir.render()}"
is VariableDeclarationNode ->
"Variable declaration: ${
FirRenderer(mode = CfgRenderMode).renderAsCallableDeclarationString(fir)
CfgRenderer.renderAsCallableDeclarationString(fir)
}"
is VariableAssignmentNode -> "Assignment: ${fir.lValue.render(CfgRenderMode)}"
is FunctionCallNode -> "Function call: ${fir.render(CfgRenderMode)}"
is DelegatedConstructorCallNode -> "Delegated constructor call: ${fir.render(CfgRenderMode)}"
is StringConcatenationCallNode -> "String concatenation call: ${fir.render(CfgRenderMode)}"
is ThrowExceptionNode -> "Throw: ${fir.render(CfgRenderMode)}"
is VariableAssignmentNode -> "Assignment: ${CfgRenderer.renderElementAsString(fir.lValue)}"
is FunctionCallNode -> "Function call: ${CfgRenderer.renderElementAsString(fir)}"
is DelegatedConstructorCallNode -> "Delegated constructor call: ${CfgRenderer.renderElementAsString(fir)}"
is StringConcatenationCallNode -> "String concatenation call: ${CfgRenderer.renderElementAsString(fir)}"
is ThrowExceptionNode -> "Throw: ${CfgRenderer.renderElementAsString(fir)}"
is TryExpressionEnterNode -> "Try expression enter"
is TryMainBlockEnterNode -> "Try main block enter"
@@ -123,7 +123,7 @@ fun CFGNode<*>.render(): String =
is ElvisRhsEnterNode -> "Enter rhs of ?:"
is ElvisExitNode -> "Exit ?:"
is CallableReferenceNode -> "Callable reference: ${fir.render(CfgRenderMode)}"
is CallableReferenceNode -> "Callable reference: ${CfgRenderer.renderElementAsString(fir)}"
is GetClassCallNode -> "::class call"
is AbstractBinaryExitNode -> throw IllegalStateException()
@@ -131,12 +131,14 @@ fun CFGNode<*>.render(): String =
)
}
private val CfgRenderMode = FirRenderer.RenderMode(
renderCallArguments = false,
renderCallableFqNames = false,
renderDeclarationResolvePhase = false,
renderAnnotation = false,
)
// NB: renderer has a state, so we have to create it each time
private val CfgRenderer
get() = FirRenderer(
mode = FirRenderer.RenderMode(
renderCallArguments = false,
renderCallableFqNames = false,
)
).with(annotationRenderer = null)
private fun FirFunction.name(): String = when (this) {
is FirSimpleFunction -> name.asString()