diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Statements.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Statements.kt index b7a7be1a5e3..173d7d080a7 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Statements.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Statements.kt @@ -69,6 +69,9 @@ class IfStatement( if (!elseStatement.isEmpty) { builder append br append "else" append brAfterElse append elseStatement.wrapToBlockIfRequired() } + else if (thenStatement.isEmpty) { + builder append ";" + } } } @@ -79,6 +82,9 @@ class WhileStatement(val condition: Expression, val body: Element, singleLine: B override fun generateCode(builder: CodeBuilder) { builder append "while (" append condition append ")" append br append body.wrapToBlockIfRequired() + if (body.isEmpty) { + builder append ";" + } } } @@ -106,6 +112,9 @@ class ForeachStatement( builder append ":" append explicitVariableType } builder append " in " append collection append ")" append br append body.wrapToBlockIfRequired() + if (body.isEmpty) { + builder append ";" + } } } diff --git a/j2k/testData/fileOrElement/for/forWithoutBody.java b/j2k/testData/fileOrElement/for/forWithoutBody.java new file mode 100644 index 00000000000..30a9e538de5 --- /dev/null +++ b/j2k/testData/fileOrElement/for/forWithoutBody.java @@ -0,0 +1,6 @@ +public class A { + public void aVoid() { + for (int i = 0; i < 10; i++); + System.out.println("Done"); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/for/forWithoutBody.kt b/j2k/testData/fileOrElement/for/forWithoutBody.kt new file mode 100644 index 00000000000..ce368f4db03 --- /dev/null +++ b/j2k/testData/fileOrElement/for/forWithoutBody.kt @@ -0,0 +1,6 @@ +class A { + fun aVoid() { + for (i in 0..9); + println("Done") + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.java b/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.java new file mode 100644 index 00000000000..7e787c24ced --- /dev/null +++ b/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.java @@ -0,0 +1,8 @@ +public class A { + public void aVoid() { + int[] array = new int[10]; + + for (int i : array); + System.out.println("Done"); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.kt b/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.kt new file mode 100644 index 00000000000..7e037899427 --- /dev/null +++ b/j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.kt @@ -0,0 +1,8 @@ +class A { + fun aVoid() { + val array = IntArray(10) + + for (i in array); + println("Done") + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.java b/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.java new file mode 100644 index 00000000000..db771b0ee89 --- /dev/null +++ b/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.java @@ -0,0 +1,8 @@ +public class A { + public void aVoid() { + int i = 0; + + if (i > 10); + System.out.println("Done"); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.kt b/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.kt new file mode 100644 index 00000000000..9d25c4f45e6 --- /dev/null +++ b/j2k/testData/fileOrElement/ifStatement/ifWithoutThen.kt @@ -0,0 +1,8 @@ +class A { + fun aVoid() { + val i = 0 + + if (i > 10); + println("Done") + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.java b/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.java new file mode 100644 index 00000000000..95b194d873e --- /dev/null +++ b/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.java @@ -0,0 +1,8 @@ +public class A { + public void aVoid() { + int i = 0; + + while(i++ < 10); + System.out.println("Done"); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.kt b/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.kt new file mode 100644 index 00000000000..6c5e193e7ce --- /dev/null +++ b/j2k/testData/fileOrElement/whileStatement/whileWithoutBody.kt @@ -0,0 +1,8 @@ +class A { + fun aVoid() { + var i = 0 + + while (i++ < 10); + println("Done") + } +} diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index 55b3a5876e6..af7d46456d7 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -2288,6 +2288,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("forWithoutBody.java") + public void testForWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/for/forWithoutBody.java"); + doTest(fileName); + } + @TestMetadata("indicesReversed.java") public void testIndicesReversed() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/for/indicesReversed.java"); @@ -2399,6 +2405,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("foreachWithoutBody.java") + public void testForeachWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.java"); + doTest(fileName); + } + @TestMetadata("nullableIterable.java") public void testNullableIterable() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/foreachStatement/nullableIterable.java"); @@ -2723,6 +2735,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("ifWithoutThen.java") + public void testIfWithoutThen() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/ifStatement/ifWithoutThen.java"); + doTest(fileName); + } + @TestMetadata("multiLine.java") public void testMultiLine() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/ifStatement/multiLine.java"); @@ -5095,5 +5113,11 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/whileStatement/whileWithReturn.java"); doTest(fileName); } + + @TestMetadata("whileWithoutBody.java") + public void testWhileWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/whileStatement/whileWithoutBody.java"); + doTest(fileName); + } } } diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 1e6e0851c96..2215c2f37ee 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -2288,6 +2288,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("forWithoutBody.java") + public void testForWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/for/forWithoutBody.java"); + doTest(fileName); + } + @TestMetadata("indicesReversed.java") public void testIndicesReversed() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/for/indicesReversed.java"); @@ -2399,6 +2405,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("foreachWithoutBody.java") + public void testForeachWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/foreachStatement/foreachWithoutBody.java"); + doTest(fileName); + } + @TestMetadata("nullableIterable.java") public void testNullableIterable() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/foreachStatement/nullableIterable.java"); @@ -2723,6 +2735,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("ifWithoutThen.java") + public void testIfWithoutThen() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/ifStatement/ifWithoutThen.java"); + doTest(fileName); + } + @TestMetadata("multiLine.java") public void testMultiLine() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/ifStatement/multiLine.java"); @@ -5095,5 +5113,11 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/whileStatement/whileWithReturn.java"); doTest(fileName); } + + @TestMetadata("whileWithoutBody.java") + public void testWhileWithoutBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/whileStatement/whileWithoutBody.java"); + doTest(fileName); + } } }