J2K: preserving line breaks between arguments

This commit is contained in:
Valentin Kipyatkov
2015-06-16 14:01:38 +03:00
parent fefb828fae
commit 40fe680acf
7 changed files with 76 additions and 6 deletions
@@ -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 {
@@ -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);
}
}
@@ -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)
}
}
@@ -0,0 +1,11 @@
class C {
C(int p1, int p2, int p3){}
}
class User {
void foo() {
new C(1,
2,
3);
}
}
@@ -0,0 +1,9 @@
class C(p1: Int, p2: Int, p3: Int)
class User {
fun foo() {
C(1,
2,
3)
}
}
@@ -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");
@@ -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");