From 4310575de90266d74c2613b921dda4cad7b753ea Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 10 Nov 2018 20:25:40 +0300 Subject: [PATCH] New J2K: Add ';' in a case of For loop and While loop empty body --- .../jetbrains/kotlin/j2k/NewCodeBuilder.kt | 23 +++++++++++++------ .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 10 +++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 4dd744fb312..45ec57682f4 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -86,13 +86,17 @@ class NewCodeBuilder { } } - override fun visitKtForInStatement(ktForInStatement: JKKtForInStatement) { + override fun visitForInStatement(forInStatement: JKForInStatement) { printer.printWithNoIndent("for (") - ktForInStatement.declaration.accept(this) + forInStatement.declaration.accept(this) printer.printWithNoIndent(" in ") - ktForInStatement.iterationExpression.accept(this) + forInStatement.iterationExpression.accept(this) printer.printWithNoIndent(") ") - ktForInStatement.body.accept(this) + if (forInStatement.body.isEmpty()) { + printer.printWithNoIndent(";") + } else { + forInStatement.body.accept(this) + } } override fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression) { @@ -477,11 +481,15 @@ class NewCodeBuilder { printer.print("while(") whileStatement.condition.accept(this) printer.printWithNoIndent(")") - renderStatementOrBlock(whileStatement.body, multiline = true) + if (whileStatement.body.isEmpty()) { + printer.printWithNoIndent(";") + } else { + renderStatementOrBlock(whileStatement.body, multiline = true) + } } override fun visitLocalVariable(localVariable: JKLocalVariable) { - if (localVariable.parent !is JKKtForInStatement) { + if (localVariable.parent !is JKForInStatement) { if (localVariable.modifierList.modality == JKModalityModifier.Modality.FINAL) { printer.print("val") } else { @@ -600,7 +608,8 @@ class NewCodeBuilder { } override fun visitKtConstructor(ktConstructor: JKKtConstructor) { - printer.print("constructor") + ktConstructor.modifierList.accept(this) + printer.print(" constructor") renderParameterList(ktConstructor.parameters) if (ktConstructor.delegationCall !is JKStubExpression) { builder.append(" : ") diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index cc73b87ba92..ff32eeb7eb8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -492,4 +492,12 @@ class JKForInStatementImpl(declaration: JKDeclaration, iterationExpression: JKEx override var iterationExpression: JKExpression by child(iterationExpression) override var body: JKStatement by child(body) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitForInStatement(this, data) -} \ No newline at end of file +} + +fun JKStatement.isEmpty(): Boolean = + when (this) { + is JKEmptyStatement -> true + is JKBlockStatement -> block is JKBodyStub || block.statements.isEmpty() + is JKExpressionStatement -> expression is JKStubExpression + else -> false + } \ No newline at end of file