diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index 123bce71e6b..5563b1a7678 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -479,21 +479,27 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { if (isExtension && arguments.isNotEmpty()) { arguments = arguments.drop(1) } + val resolved = expression.resolveMethod() val parameters = resolved?.getParameterList()?.getParameters() val expectedTypes = parameters?.map { it.getType() } ?: listOf() - return if (arguments.size() == expectedTypes.size()) - (0..arguments.lastIndex).map { i -> + val commentsAndSpacesInheritance = CommentsAndSpacesInheritance(spacesBefore = SpacesInheritance.LINE_BREAKS) + + return if (arguments.size() == expectedTypes.size()) { + arguments.indices.map { i -> val argument = arguments[i] val converted = codeConverter.convertExpression(argument, expectedTypes[i]) - if (parameters != null && i == arguments.lastIndex && parameters[i].isVarArgs() && argument.getType() is PsiArrayType) - StarExpression(converted).assignNoPrototype() + val result = if (parameters != null && i == arguments.lastIndex && parameters[i].isVarArgs() && argument.getType() is PsiArrayType) + StarExpression(converted) else converted + result.assignPrototype(argument, commentsAndSpacesInheritance) } - else - arguments.map { codeConverter.convertExpression(it) } + } + else { + arguments.map { codeConverter.convertExpression(it).assignPrototype(it, commentsAndSpacesInheritance) } + } } private fun getOperatorString(tokenType: IElementType): String { diff --git a/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.java b/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.java new file mode 100644 index 00000000000..987e612778f --- /dev/null +++ b/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.java @@ -0,0 +1,10 @@ +class F { + void f1(int p1, int p2, int p3, int p4, int... p5) { + } + + void f2(int[] array) { + f1(1, 2, + 3, 4, + array); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.kt b/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.kt new file mode 100644 index 00000000000..f9674a2a7eb --- /dev/null +++ b/j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.kt @@ -0,0 +1,10 @@ +class F { + fun f1(p1: Int, p2: Int, p3: Int, p4: Int, vararg p5: Int) { + } + + fun f2(array: IntArray) { + f1(1, 2, + 3, 4, + *array) + } +} diff --git a/j2k/testData/fileOrElement/newClassExpression/lineBreaks.java b/j2k/testData/fileOrElement/newClassExpression/lineBreaks.java new file mode 100644 index 00000000000..d146592c022 --- /dev/null +++ b/j2k/testData/fileOrElement/newClassExpression/lineBreaks.java @@ -0,0 +1,11 @@ +class C { + C(int p1, int p2, int p3){} +} + +class User { + void foo() { + new C(1, + 2, + 3); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/newClassExpression/lineBreaks.kt b/j2k/testData/fileOrElement/newClassExpression/lineBreaks.kt new file mode 100644 index 00000000000..0360b5286d6 --- /dev/null +++ b/j2k/testData/fileOrElement/newClassExpression/lineBreaks.kt @@ -0,0 +1,9 @@ +class C(p1: Int, p2: Int, p3: Int) + +class User { + fun foo() { + C(1, + 2, + 3) + } +} diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index aab181c0227..f8fa544604a 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -2155,6 +2155,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/formatting"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("lineBreaksBetweenArguments.java") + public void testLineBreaksBetweenArguments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.java"); + doTest(fileName); + } + @TestMetadata("nonStaticMembers.java") public void testNonStaticMembers() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/formatting/nonStaticMembers.java"); @@ -3223,6 +3229,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("lineBreaks.java") + public void testLineBreaks() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/newClassExpression/lineBreaks.java"); + doTest(fileName); + } + @TestMetadata("newAnonymousClass.java") public void testNewAnonymousClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/newClassExpression/newAnonymousClass.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 0f2bcfcf5e9..2446d95b0fc 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -2155,6 +2155,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/formatting"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("lineBreaksBetweenArguments.java") + public void testLineBreaksBetweenArguments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/formatting/lineBreaksBetweenArguments.java"); + doTest(fileName); + } + @TestMetadata("nonStaticMembers.java") public void testNonStaticMembers() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/formatting/nonStaticMembers.java"); @@ -3223,6 +3229,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("lineBreaks.java") + public void testLineBreaks() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/newClassExpression/lineBreaks.java"); + doTest(fileName); + } + @TestMetadata("newAnonymousClass.java") public void testNewAnonymousClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/newClassExpression/newAnonymousClass.java");