From 399db0d3c7c1a930c4d445689ccf3028c9eb9356 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 17 Jul 2019 18:28:59 +0900 Subject: [PATCH] Move statement: fix comma placement for argument/parameter #KT-14756 Fixed --- .../upDownMover/KotlinExpressionMover.java | 20 +++++++++++-- .../parametersAndArguments/callArgs7.kt | 6 ++++ .../parametersAndArguments/callArgs7.kt.after | 6 ++++ .../parametersAndArguments/callArgs8.kt | 6 ++++ .../parametersAndArguments/callArgs8.kt.after | 6 ++++ .../parametersAndArguments/classParams7.kt | 6 ++++ .../classParams7.kt.after | 6 ++++ .../parametersAndArguments/classParams8.kt | 6 ++++ .../classParams8.kt.after | 6 ++++ .../parametersAndArguments/funParams7.kt | 7 +++++ .../funParams7.kt.after | 7 +++++ .../parametersAndArguments/funParams8.kt | 7 +++++ .../funParams8.kt.after | 7 +++++ .../MoveStatementTestGenerated.java | 30 +++++++++++++++++++ 14 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt create mode 100644 idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/upDownMover/KotlinExpressionMover.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/upDownMover/KotlinExpressionMover.java index bbad1bd9dae..5d13a09c39e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/upDownMover/KotlinExpressionMover.java +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/upDownMover/KotlinExpressionMover.java @@ -591,8 +591,8 @@ public class KotlinExpressionMover extends AbstractKotlinUpDownMover { @Override public void beforeMove(@NotNull Editor editor, @NotNull MoveInfo info, boolean down) { if (parametersOrArgsToMove != null) { - PsiElement element1 = parametersOrArgsToMove.first; - PsiElement element2 = parametersOrArgsToMove.second; + PsiElement element1 = getLastSiblingOfSameTypeInLine(parametersOrArgsToMove.first, editor); + PsiElement element2 = getLastSiblingOfSameTypeInLine(parametersOrArgsToMove.second, editor); fixCommaIfNeeded(element1, down && isLastOfItsKind(element2, true)); fixCommaIfNeeded(element2, !down && isLastOfItsKind(element1, true)); @@ -601,4 +601,20 @@ public class KotlinExpressionMover extends AbstractKotlinUpDownMover { PsiDocumentManager.getInstance(editor.getProject()).doPostponedOperationsAndUnblockDocument(editor.getDocument()); } } + + @NotNull + private static PsiElement getLastSiblingOfSameTypeInLine(@NotNull PsiElement element, @NotNull Editor editor) { + PsiElement lastElement = element; + int lineNumber = getElementLine(element, editor, true); + while (true) { + PsiElement nextElement = PsiTreeUtil.getNextSiblingOfType(lastElement, lastElement.getClass()); + if (nextElement != null && getElementLine(nextElement, editor, true) == lineNumber) { + lastElement = nextElement; + } + else { + break; + } + } + return lastElement; + } } diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt new file mode 100644 index 00000000000..30e4444b070 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt @@ -0,0 +1,6 @@ +// MOVE: down +val x = listOf( + 1, + 2, 3, + 4 +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt.after new file mode 100644 index 00000000000..a2f58490135 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt.after @@ -0,0 +1,6 @@ +// MOVE: down +val x = listOf( + 1, + 4, + 2, 3 +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt new file mode 100644 index 00000000000..0131c250d2e --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt @@ -0,0 +1,6 @@ +// MOVE: up +val x = listOf( + 1, + 4, + 2, 3 +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt.after new file mode 100644 index 00000000000..bf9e92803ca --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt.after @@ -0,0 +1,6 @@ +// MOVE: up +val x = listOf( + 1, + 2, 3, + 4 +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt new file mode 100644 index 00000000000..1ceab11dd68 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt @@ -0,0 +1,6 @@ +// MOVE: down +class A( + a: Int, + b: Int, c: Int, + d: Int +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt.after new file mode 100644 index 00000000000..e5c0cffcf00 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt.after @@ -0,0 +1,6 @@ +// MOVE: down +class A( + a: Int, + d: Int, + b: Int, c: Int +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt new file mode 100644 index 00000000000..dc2c25c0e79 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt @@ -0,0 +1,6 @@ +// MOVE: up +class A( + a: Int, + d: Int, + b: Int, c: Int +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt.after new file mode 100644 index 00000000000..97cbdedba20 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt.after @@ -0,0 +1,6 @@ +// MOVE: up +class A( + a: Int, + b: Int, c: Int, + d: Int +) \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt new file mode 100644 index 00000000000..0eadc67fd29 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt @@ -0,0 +1,7 @@ +// MOVE: down +fun test( + a: Int, + b: Int, c: Int, + d: Int +) { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt.after new file mode 100644 index 00000000000..7a190f6980c --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt.after @@ -0,0 +1,7 @@ +// MOVE: down +fun test( + a: Int, + d: Int, + b: Int, c: Int +) { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt new file mode 100644 index 00000000000..9c82937256f --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt @@ -0,0 +1,7 @@ +// MOVE: up +fun test( + a: Int, + d: Int, + b: Int, c: Int +) { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt.after b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt.after new file mode 100644 index 00000000000..2eecc5a8830 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt.after @@ -0,0 +1,7 @@ +// MOVE: up +fun test( + a: Int, + b: Int, c: Int, + d: Int +) { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveStatementTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveStatementTestGenerated.java index 364f40d2746..61151e41b38 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveStatementTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveStatementTestGenerated.java @@ -1212,6 +1212,16 @@ public class MoveStatementTestGenerated extends AbstractMoveStatementTest { runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs6.kt"); } + @TestMetadata("callArgs7.kt") + public void testCallArgs7() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs7.kt"); + } + + @TestMetadata("callArgs8.kt") + public void testCallArgs8() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/callArgs8.kt"); + } + @TestMetadata("classParams1.kt") public void testClassParams1() throws Exception { runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams1.kt"); @@ -1242,6 +1252,16 @@ public class MoveStatementTestGenerated extends AbstractMoveStatementTest { runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams6.kt"); } + @TestMetadata("classParams7.kt") + public void testClassParams7() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams7.kt"); + } + + @TestMetadata("classParams8.kt") + public void testClassParams8() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/classParams8.kt"); + } + @TestMetadata("funParams1.kt") public void testFunParams1() throws Exception { runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams1.kt"); @@ -1271,5 +1291,15 @@ public class MoveStatementTestGenerated extends AbstractMoveStatementTest { public void testFunParams6() throws Exception { runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams6.kt"); } + + @TestMetadata("funParams7.kt") + public void testFunParams7() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams7.kt"); + } + + @TestMetadata("funParams8.kt") + public void testFunParams8() throws Exception { + runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt"); + } } }