From b868214992fa45e443f49aef0e3414466eeda714 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 17 Aug 2018 18:23:04 +0300 Subject: [PATCH] New J2K: Improve debug tree printer, now it capable of printing universe symbols --- .../kotlin/j2k/tree/DebugTreePrinter.kt | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt index 7500061e496..fd97b7bb720 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.j2k.tree -import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol +import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitorVoid import org.jetbrains.kotlin.utils.Printer @@ -24,20 +24,24 @@ private class DebugTreePrinter : JKVisitorVoid { internal val stringBuilder = StringBuilder() private val printer = Printer(stringBuilder) - override fun visitTreeElement(element: JKTreeElement) { - printer.println(element.classNameWithoutJK(), " [") + override fun visitTreeElement(treeElement: JKTreeElement) { + printer.println(treeElement.describe(), " [") printer.indented { - element.acceptChildren(this, null) + treeElement.acceptChildren(this, null) } printer.println("]") } + override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) { + printer.println(nameIdentifier.describe(), "(\"", nameIdentifier.value, "\")") + } + override fun visitJavaModifier(javaModifier: JKJavaModifier) { - printer.println(javaModifier.classNameWithoutJK(), "(", javaModifier.type, ")") + printer.println(javaModifier.describe(), "(", javaModifier.type, ")") } override fun visitJavaMethod(javaMethod: JKJavaMethod) { - printer.println(javaMethod.classNameWithoutJK(), " [") + printer.println(javaMethod.describe(), " [") printer.indented { javaMethod.block.accept(this, null) javaMethod.modifierList.accept(this, null) @@ -47,7 +51,7 @@ private class DebugTreePrinter : JKVisitorVoid { } override fun visitExpressionStatement(expressionStatement: JKExpressionStatement) { - printer.println(expressionStatement.classNameWithoutJK(), " [") + printer.println(expressionStatement.describe(), " [") printer.indented { expressionStatement.acceptChildren(this, null) } @@ -55,7 +59,7 @@ private class DebugTreePrinter : JKVisitorVoid { } override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) { - printer.println(qualifiedExpression.classNameWithoutJK(), " [") + printer.println(qualifiedExpression.describe(), " [") printer.indented { qualifiedExpression.acceptChildren(this, null) } @@ -63,7 +67,7 @@ private class DebugTreePrinter : JKVisitorVoid { } override fun visitBlock(block: JKBlock) { - printer.println(block.classNameWithoutJK(), " [") + printer.println(block.describe(), " [") printer.indented { block.acceptChildren(this, null) } @@ -83,9 +87,25 @@ private class DebugTreePrinter : JKVisitorVoid { } printer.println("\"") } + + override fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) { + printer.print(fieldAccessExpression.describe(), "(") + printSymbol(fieldAccessExpression.identifier) + printer.printlnWithNoIndent(")") + } + + fun printSymbol(symbol: JKSymbol) { + if (symbol is JKUniverseSymbol<*>) { + printer.printWithNoIndent(symbol.target.describe()) + } else { + printer.printWithNoIndent("Psi") + } + } } -private fun Any.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK") +private fun JKTreeElement.describe(): String = this.classNameWithoutJK() + "@${this.hashCode().toString(16)}" +private fun JKTreeElement.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK") +private fun JKType.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK") private inline fun Printer.indented(block: () -> Unit) { this.pushIndent()