New J2K: Added more cases to code builder.
This commit is contained in:
@@ -37,13 +37,34 @@ class NewCodeBuilder {
|
||||
JKClass.ClassKind.INTERFACE -> "interface"
|
||||
}
|
||||
|
||||
|
||||
inner class Visitor : JKVisitorVoid {
|
||||
override fun visitTreeElement(treeElement: JKTreeElement) {
|
||||
printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */")
|
||||
}
|
||||
|
||||
override fun visitModifierList(modifierList: JKModifierList) {
|
||||
modifierList.modifiers.firstOrNull()?.accept(this)
|
||||
for (i in 1..modifierList.modifiers.lastIndex) {
|
||||
printer.printWithNoIndent(" ")
|
||||
modifierList.modifiers[i].accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitKtModifier(ktModifier: JKKtModifier) {
|
||||
printer.printWithNoIndent(
|
||||
when (ktModifier.type) {
|
||||
JKKtModifier.KtModifierType.INTERNAL -> "internal"
|
||||
JKKtModifier.KtModifierType.ABSTRACT -> "abstract"
|
||||
JKKtModifier.KtModifierType.INNER -> "inner"
|
||||
JKKtModifier.KtModifierType.OPEN -> "open"
|
||||
else -> ktModifier.type.toString()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun visitClass(klass: JKClass) {
|
||||
klass.modifierList.accept(this)
|
||||
builder.append(" ")
|
||||
printer.print(classKindString(klass.classKind))
|
||||
builder.append(" ")
|
||||
printer.print(klass.name.value)
|
||||
@@ -56,58 +77,6 @@ class NewCodeBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) {
|
||||
binaryExpression.left.accept(this)
|
||||
printer.printWithNoIndent(binaryExpression.operator)
|
||||
binaryExpression.right.accept(this)
|
||||
}
|
||||
|
||||
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression) {
|
||||
printer.printWithNoIndent(ktLiteralExpression.literal)
|
||||
}
|
||||
|
||||
override fun visitTypeElement(typeElement: JKTypeElement) {
|
||||
val type = typeElement.type
|
||||
when (type) {
|
||||
is JKClassType -> (type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) }
|
||||
else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */")
|
||||
}
|
||||
when (type.nullability) {
|
||||
Nullability.Nullable -> printer.printWithNoIndent("?")
|
||||
Nullability.Default -> printer.printWithNoIndent("? /* TODO: Default */")
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitKtFunction(ktFunction: JKKtFunction) {
|
||||
printer.print("fun ", ktFunction.name.value, "(", "): ")
|
||||
ktFunction.returnType.accept(this)
|
||||
if (ktFunction.block !== JKBodyStub) {
|
||||
printer.printlnWithNoIndent("{")
|
||||
printer.pushIndent()
|
||||
ktFunction.block.accept(this)
|
||||
printer.popIndent()
|
||||
printer.printWithNoIndent("}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitBlock(block: JKBlock) {
|
||||
block.acceptChildren(this)
|
||||
}
|
||||
|
||||
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement) {
|
||||
printer.printIndent()
|
||||
expressionStatement.expression.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
|
||||
override fun visitReturnStatement(returnStatement: JKReturnStatement) {
|
||||
printer.print("return ")
|
||||
returnStatement.expression.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
|
||||
override fun visitKtProperty(ktProperty: JKKtProperty) {
|
||||
// TODO: Fix this
|
||||
if (ktProperty.modifierList.modifiers.any { (it as? JKJavaModifier)?.type == JKJavaModifier.JavaModifierType.FINAL }) {
|
||||
@@ -124,6 +93,95 @@ class NewCodeBuilder {
|
||||
}
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
|
||||
override fun visitKtFunction(ktFunction: JKKtFunction) {
|
||||
printer.print("fun ", ktFunction.name.value, "(", "): ")
|
||||
ktFunction.returnType.accept(this)
|
||||
if (ktFunction.block !== JKBodyStub) {
|
||||
printer.printlnWithNoIndent("{")
|
||||
printer.pushIndent()
|
||||
ktFunction.block.accept(this)
|
||||
printer.popIndent()
|
||||
printer.printWithNoIndent("}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) {
|
||||
binaryExpression.left.accept(this)
|
||||
printer.printWithNoIndent(binaryExpression.operator)
|
||||
binaryExpression.right.accept(this)
|
||||
}
|
||||
|
||||
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression) {
|
||||
printer.printWithNoIndent(ktLiteralExpression.literal)
|
||||
}
|
||||
|
||||
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
||||
printer.printWithNoIndent(prefixExpression.operator)
|
||||
prefixExpression.expression.accept(this)
|
||||
}
|
||||
|
||||
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) {
|
||||
postfixExpression.expression.accept(this)
|
||||
printer.printWithNoIndent(postfixExpression.operator)
|
||||
}
|
||||
|
||||
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
||||
qualifiedExpression.receiver.accept(this)
|
||||
printer.printWithNoIndent(qualifiedExpression.operator)
|
||||
qualifiedExpression.selector.accept(this)
|
||||
}
|
||||
|
||||
override fun visitExpressionList(expressionList: JKExpressionList) {
|
||||
expressionList.expressions.firstOrNull()?.accept(this)
|
||||
for (i in 1..expressionList.expressions.lastIndex) {
|
||||
printer.printWithNoIndent(", ")
|
||||
expressionList.expressions[i].accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) {
|
||||
printer.printWithNoIndent(printer.printWithNoIndent(FqName(methodCallExpression.identifier.fqName).shortName().asString()))
|
||||
printer.printWithNoIndent("(")
|
||||
methodCallExpression.arguments.accept(this)
|
||||
printer.printWithNoIndent(")")
|
||||
}
|
||||
|
||||
override fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression) {
|
||||
printer.printWithNoIndent("(")
|
||||
parenthesizedExpression.expression.accept(this)
|
||||
printer.printWithNoIndent(")")
|
||||
}
|
||||
|
||||
override fun visitTypeElement(typeElement: JKTypeElement) {
|
||||
val type = typeElement.type
|
||||
when (type) {
|
||||
is JKClassType -> (type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) }
|
||||
else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */")
|
||||
}
|
||||
when (type.nullability) {
|
||||
Nullability.Nullable -> printer.printWithNoIndent("?")
|
||||
Nullability.Default -> printer.printWithNoIndent("? /* TODO: Default */")
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitBlock(block: JKBlock) {
|
||||
block.acceptChildren(this)
|
||||
}
|
||||
|
||||
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement) {
|
||||
printer.printIndent()
|
||||
expressionStatement.expression.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
|
||||
override fun visitReturnStatement(returnStatement: JKReturnStatement) {
|
||||
printer.print("return ")
|
||||
returnStatement.expression.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
}
|
||||
|
||||
fun printCodeOut(root: JKTreeElement): String {
|
||||
|
||||
Reference in New Issue
Block a user