getElements(@NotNull PsiParameterList list) {
+ return Arrays.asList(list.getParameters());
+ }
+
+
+ @Override
+ boolean needTailBreak(@NotNull PsiParameter last) {
+ return CodeStyle.getLanguageSettings(last.getContainingFile(), JavaLanguage.INSTANCE).METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE;
+ }
+
+ @Override
+ boolean needHeadBreak(@NotNull PsiParameter first) {
+ return CodeStyle.getLanguageSettings(first.getContainingFile(), JavaLanguage.INSTANCE).METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE;
+ }
+
+ @Nls(capitalization = Nls.Capitalization.Sentence)
+ @NotNull
+ @Override
+ public String getFamilyName() {
+ return "Put parameters on separate lines";
+ }
+
+ @NotNull
+ @Override
+ public String getText() {
+ return getFamilyName();
+ }
+}
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/after.java.template b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/after.java.template
new file mode 100644
index 000000000000..3870ffed7038
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/after.java.template
@@ -0,0 +1,9 @@
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(
+ 1,
+ 2,
+ 3
+ )
+ }
+}
\ No newline at end of file
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/before.java.template b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/before.java.template
new file mode 100644
index 000000000000..4d570faf2370
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/before.java.template
@@ -0,0 +1,5 @@
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1, 2, 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/description.html b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/description.html
new file mode 100644
index 000000000000..52ad404118a5
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopArgumentsAction/description.html
@@ -0,0 +1,6 @@
+
+
+Put arguments on separate lines. Tail and head breaks are set according to formatting settings.
+
+
+
\ No newline at end of file
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/after.java.template b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/after.java.template
new file mode 100644
index 000000000000..9989e167eb58
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/after.java.template
@@ -0,0 +1,9 @@
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/before.java.template b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/before.java.template
new file mode 100644
index 000000000000..5b37c4ca84d7
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/before.java.template
@@ -0,0 +1,6 @@
+class A {
+ void foo(A a1,
+ A a2, A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/description.html b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/description.html
new file mode 100644
index 000000000000..065b4a11cfd0
--- /dev/null
+++ b/java/java-impl/src/intentionDescriptions/JavaChopParametersAction/description.html
@@ -0,0 +1,7 @@
+
+
+Put parameters on separate lines. Tail and head breaks are set according to formatting settings.
+
+
+
+
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLine.java
new file mode 100644
index 000000000000..05653158b949
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLine.java
@@ -0,0 +1,9 @@
+// "Put arguments on separate lines" "true"
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1,
+ 2,
+ 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparen.java
new file mode 100644
index 000000000000..224fe4cb9fe3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparen.java
@@ -0,0 +1,10 @@
+// "Put arguments on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1,
+ 2,
+ 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparenRparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparenRparen.java
new file mode 100644
index 000000000000..e63918810eb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/afterAllOnSingleLineLparenRparen.java
@@ -0,0 +1,13 @@
+// "Put arguments on separate lines" "true"
+// break after lparen
+// break before rparen
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(
+ 1,
+ 2,
+ 3
+ )
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLine.java
new file mode 100644
index 000000000000..76f2a8690ea4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLine.java
@@ -0,0 +1,7 @@
+// "Put arguments on separate lines" "true"
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1, 2, 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparen.java
new file mode 100644
index 000000000000..b5d4c662005a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparen.java
@@ -0,0 +1,8 @@
+// "Put arguments on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1, 2, 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparenRparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparenRparen.java
new file mode 100644
index 000000000000..5fa45f25af5a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments/beforeAllOnSingleLineLparenRparen.java
@@ -0,0 +1,9 @@
+// "Put arguments on separate lines" "true"
+// break after lparen
+// break before rparen
+
+class A {
+ void foo(int a1, int a2, int a3) {
+ foo(1, 2, 3)
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSeparateLinesExceptLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSeparateLinesExceptLparen.java
new file mode 100644
index 000000000000..26df08fdde7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSeparateLinesExceptLparen.java
@@ -0,0 +1,11 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLine.java
new file mode 100644
index 000000000000..c65442266efc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLine.java
@@ -0,0 +1,9 @@
+// "Put parameters on separate lines" "true"
+
+class A {
+ void foo(A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparen.java
new file mode 100644
index 000000000000..26df08fdde7a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparen.java
@@ -0,0 +1,11 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparenRparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparenRparen.java
new file mode 100644
index 000000000000..579b2c90a6a8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterAllOnSingleLineLparenRparen.java
@@ -0,0 +1,13 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+// break before rparen
+
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterNotAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterNotAllOnSingleLine.java
new file mode 100644
index 000000000000..c65442266efc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/afterNotAllOnSingleLine.java
@@ -0,0 +1,9 @@
+// "Put parameters on separate lines" "true"
+
+class A {
+ void foo(A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLines.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLines.java
new file mode 100644
index 000000000000..6872fd59d882
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLines.java
@@ -0,0 +1,11 @@
+// "Put parameters on separate lines" "false"
+
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesExceptLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesExceptLparen.java
new file mode 100644
index 000000000000..13cabf91b131
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesExceptLparen.java
@@ -0,0 +1,10 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesLparenBreak.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesLparenBreak.java
new file mode 100644
index 000000000000..fe0126828b7c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesLparenBreak.java
@@ -0,0 +1,11 @@
+// "Put parameters on separate lines" "false"
+// break after lparen
+
+class A {
+ void foo(
+ A a1,
+ A a2,
+ A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesRparenBreak.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesRparenBreak.java
new file mode 100644
index 000000000000..3e371553187b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSeparateLinesRparenBreak.java
@@ -0,0 +1,11 @@
+// "Put parameters on separate lines" "false"
+// break before rparen
+
+class A {
+ void foo(A a1,
+ A a2,
+ A a3
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLine.java
new file mode 100644
index 000000000000..426d24d2ccf8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLine.java
@@ -0,0 +1,7 @@
+// "Put parameters on separate lines" "true"
+
+class A {
+ void foo(A a1, A a2, A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparen.java
new file mode 100644
index 000000000000..560237f4466b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparen.java
@@ -0,0 +1,8 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+
+class A {
+ void foo(A a1, A a2, A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparenRparen.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparenRparen.java
new file mode 100644
index 000000000000..ef9e22c1c02f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeAllOnSingleLineLparenRparen.java
@@ -0,0 +1,9 @@
+// "Put parameters on separate lines" "true"
+// break after lparen
+// break before rparen
+
+class A {
+ void foo(A a1, A a2, A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeNotAllOnSingleLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeNotAllOnSingleLine.java
new file mode 100644
index 000000000000..6fa854fd51e7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters/beforeNotAllOnSingleLine.java
@@ -0,0 +1,8 @@
+// "Put parameters on separate lines" "true"
+
+class A {
+ void foo(A a1,
+ A a2, A a3) {
+
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopArgumentsActionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopArgumentsActionTest.java
new file mode 100644
index 000000000000..67d75428f311
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopArgumentsActionTest.java
@@ -0,0 +1,36 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.java.codeInsight.intention;
+
+import com.intellij.application.options.CodeStyle;
+import com.intellij.codeInsight.daemon.LightIntentionActionTestCase;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
+
+public class JavaChopArgumentsActionTest extends LightIntentionActionTestCase {
+
+ private boolean myBreakAfterLparen;
+ private boolean myBreakBeforeRparen;
+
+ @Override
+ protected String getBasePath() {
+ return "/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopArguments";
+ }
+
+ @Override
+ protected void beforeActionStarted(final String testName, final String contents) {
+ super.beforeActionStarted(testName, contents);
+ final CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
+ myBreakAfterLparen = settings.CALL_PARAMETERS_LPAREN_ON_NEXT_LINE;
+ myBreakBeforeRparen = settings.CALL_PARAMETERS_RPAREN_ON_NEXT_LINE;
+ settings.CALL_PARAMETERS_LPAREN_ON_NEXT_LINE = contents.contains("break after lparen");
+ settings.CALL_PARAMETERS_RPAREN_ON_NEXT_LINE = contents.contains("break before rparen");
+ }
+
+ @Override
+ protected void afterActionCompleted(final String testName, final String contents) {
+ super.afterActionCompleted(testName, contents);
+ CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
+ settings.CALL_PARAMETERS_LPAREN_ON_NEXT_LINE = myBreakAfterLparen;
+ settings.CALL_PARAMETERS_RPAREN_ON_NEXT_LINE = myBreakBeforeRparen;
+ }
+}
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopParametersActionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopParametersActionTest.java
new file mode 100644
index 000000000000..0f813fb324c2
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/JavaChopParametersActionTest.java
@@ -0,0 +1,36 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.java.codeInsight.intention;
+
+import com.intellij.application.options.CodeStyle;
+import com.intellij.codeInsight.daemon.LightIntentionActionTestCase;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
+
+public class JavaChopParametersActionTest extends LightIntentionActionTestCase {
+
+ private boolean myBreakAfterLparen;
+ private boolean myBreakBeforeRparen;
+
+ @Override
+ protected String getBasePath() {
+ return "/codeInsight/daemonCodeAnalyzer/quickFix/lists/chopParameters";
+ }
+
+ @Override
+ protected void beforeActionStarted(final String testName, final String contents) {
+ super.beforeActionStarted(testName, contents);
+ final CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
+ myBreakAfterLparen = settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE;
+ myBreakBeforeRparen = settings.METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE;
+ settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = contents.contains("break after lparen");
+ settings.METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE = contents.contains("break before rparen");
+ }
+
+ @Override
+ protected void afterActionCompleted(final String testName, final String contents) {
+ super.afterActionCompleted(testName, contents);
+ CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
+ settings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE = myBreakAfterLparen;
+ settings.METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE = myBreakBeforeRparen;
+ }
+}