From d77d7332440578d71da421420dd4f64fc0bc9f95 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 15 Jul 2020 23:48:18 +0300 Subject: [PATCH] [FIR] Complement fir rendering with newly created nodes --- .../org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 13 +++++++++---- .../src/org/jetbrains/kotlin/fir/FirRenderer.kt | 16 ++++++++++++++++ .../kotlin/compiler/visualizer/FirVisualizer.kt | 8 ++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index 2fc64f024ab..0aa97d16689 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -1323,11 +1323,10 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver +")" } - private fun FlowContent.generateBinary(expression: FirOperatorCall) { - val (first, second) = expression.arguments + private fun FlowContent.generateBinary(first: FirExpression, second: FirExpression, operation: FirOperation) { generate(first) ws - unresolved { +expression.operation.operator } + unresolved { +operation.operator } ws generate(second) } @@ -1341,7 +1340,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver private fun FlowContent.generate(expression: FirOperatorCall) { when (expression.arguments.size) { 1 -> generateUnary(expression) - 2 -> generateBinary(expression) + 2 -> generateBinary(expression.arguments[0], expression.arguments[1], expression.operation) else -> inlineUnsupported(expression) } } @@ -1354,6 +1353,10 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver generate(typeOperatorCall.conversionTypeRef) } + private fun FlowContent.generate(equalityOperatorCall: FirEqualityOperatorCall) { + generateBinary(equalityOperatorCall.arguments[0], equalityOperatorCall.arguments[1], equalityOperatorCall.operation) + } + private fun FlowContent.generate(checkNotNullCall: FirCheckNotNullCall) { generate(checkNotNullCall.argument) +"!!" @@ -1567,6 +1570,8 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } is FirTypeOperatorCall -> generate(expression) is FirOperatorCall -> generate(expression) + is FirAssignmentOperatorStatement -> generateBinary(expression.leftArgument, expression.rightArgument, expression.operation) + is FirEqualityOperatorCall -> generate(expression) is FirBinaryLogicExpression -> generate(expression) is FirCheckNotNullCall -> generate(expression) is FirElvisExpression -> generate(expression) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index c7ba2c44b34..b8606707dbd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -1097,6 +1097,22 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM print(")") } + override fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement) { + assignmentOperatorStatement.annotations.renderAnnotations() + print(assignmentOperatorStatement.operation.operator) + print("(") + assignmentOperatorStatement.leftArgument.accept(this@FirRenderer) + print(", ") + assignmentOperatorStatement.rightArgument.accept(this@FirRenderer) + print(")") + } + + override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall) { + equalityOperatorCall.annotations.renderAnnotations() + print(equalityOperatorCall.operation.operator) + visitCall(equalityOperatorCall) + } + override fun visitComponentCall(componentCall: FirComponentCall) { visitFunctionCall(componentCall) } diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index e52cd5efac4..aa99909e14d 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -406,6 +406,14 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { //skip rendering for as/as?/is/!is } + override fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement, data: StringBuilder) { + data.append("assignment operator statement ${assignmentOperatorStatement.operation}") + } + + override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: StringBuilder) { + data.append("equality operator call ${equalityOperatorCall.operation}") + } + override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: StringBuilder) { safeCallExpression.receiver.accept(this, data) data.append("?.{ ")