From c458993fedb19631609614b3ea6092a4f7f93685 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 23 Jun 2014 14:37:05 +0400 Subject: [PATCH] Java to Kotlin converter: fixed bug with unnecessary "run { }" construct generated in loop body --- j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt | 2 +- .../jet/j2k/test/JavaToKotlinConverterTestGenerated.java | 5 +++++ j2k/tests/testData/ast/for/infiniteFor.java | 6 ++++++ j2k/tests/testData/ast/for/infiniteFor.kt | 5 +++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 j2k/tests/testData/ast/for/infiniteFor.java create mode 100644 j2k/tests/testData/ast/for/infiniteFor.kt diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt index ab314010adf..2bcdc76238e 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.kt @@ -130,7 +130,7 @@ open class StatementVisitor(public val converter: Converter) : JavaElementVisito val updateConverted = converter.convertStatement(update) val whileBody = if (updateConverted.isEmpty) { - converter.convertStatement(body) + convertStatementOrBlock(body) } else if (body is PsiBlockStatement) { val nameConflict = initialization is PsiDeclarationStatement && initialization.getDeclaredElements().any { loopVar -> diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java index 16a6f7db03a..542b632ad73 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -1177,6 +1177,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/for/forWithReturn.java"); } + @TestMetadata("infiniteFor.java") + public void testInfiniteFor() throws Exception { + doTest("j2k/tests/testData/ast/for/infiniteFor.java"); + } + } @TestMetadata("j2k/tests/testData/ast/foreachStatement") diff --git a/j2k/tests/testData/ast/for/infiniteFor.java b/j2k/tests/testData/ast/for/infiniteFor.java new file mode 100644 index 00000000000..4d1092db123 --- /dev/null +++ b/j2k/tests/testData/ast/for/infiniteFor.java @@ -0,0 +1,6 @@ +//method +void foo() { + for(;;) { + if (!stop()) break; + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/for/infiniteFor.kt b/j2k/tests/testData/ast/for/infiniteFor.kt new file mode 100644 index 00000000000..2bf8960aea3 --- /dev/null +++ b/j2k/tests/testData/ast/for/infiniteFor.kt @@ -0,0 +1,5 @@ +fun foo() { + while (true) { + if (!stop()) break + } +} \ No newline at end of file