[FIR] Complement fir rendering with newly created nodes

This commit is contained in:
Ivan Kylchik
2020-07-15 23:48:18 +03:00
parent 9a119a6757
commit d77d733244
3 changed files with 33 additions and 4 deletions
@@ -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)
@@ -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)
}
@@ -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("?.{ ")