From a94e79baffd97f86bbf5bc6ef08e9a4ae7e5a472 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sun, 19 Jul 2015 15:02:08 +0300 Subject: [PATCH] generate constructor: place varargs from base constructor as last parameter (IDEA-142811) --- .../generation/GenerateConstructorHandler.java | 11 +++++++++-- .../generateConstructor/afterBaseVarargs.java | 11 +++++++++++ .../generateConstructor/beforeBaseVarargs.java | 8 ++++++++ .../intellij/codeInsight/GenerateConstructorTest.java | 1 + 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/generateConstructor/afterBaseVarargs.java create mode 100644 java/java-tests/testData/codeInsight/generateConstructor/beforeBaseVarargs.java diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java index 7990c5872b16..fd5a79fdb9db 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java @@ -270,8 +270,15 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { parm.getModifierList().addAfter(notNull, null); } - constructor.getParameterList().add(parm); - dummyConstructor.getParameterList().add(parm.copy()); + if (constructor.isVarArgs()) { + final PsiParameterList parameterList = constructor.getParameterList(); + parameterList.addBefore(parm, parameterList.getParameters()[parameterList.getParametersCount() - 1]); + final PsiParameterList dummyParameterlist = dummyConstructor.getParameterList(); + dummyParameterlist.addBefore(parm.copy(), dummyParameterlist.getParameters()[dummyParameterlist.getParametersCount() - 1]); + } else { + constructor.getParameterList().add(parm); + dummyConstructor.getParameterList().add(parm.copy()); + } fieldParams.add(parm); } diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterBaseVarargs.java b/java/java-tests/testData/codeInsight/generateConstructor/afterBaseVarargs.java new file mode 100644 index 000000000000..0e4a7e428de5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/generateConstructor/afterBaseVarargs.java @@ -0,0 +1,11 @@ +class Base { + public Base(String... ignored) { } +} +class Derived extends Base { + int i; + + public Derived(int i, String... ignored) { + super(ignored); + this.i = i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeBaseVarargs.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeBaseVarargs.java new file mode 100644 index 000000000000..8fa940e99fe1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeBaseVarargs.java @@ -0,0 +1,8 @@ +class Base { + public Base(String... ignored) { } +} +class Derived extends Base { + int i; + + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java index 6e626975d146..d94e980cebb1 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java @@ -37,6 +37,7 @@ public class GenerateConstructorTest extends LightCodeInsightTestCase { public void testSameNamedFields() throws Exception { doTest(); } public void testEnumWithAbstractMethod() throws Exception { doTest(); } public void testNoMoreConstructorsCanBeGenerated() throws Exception { doTest(); } + public void testBaseVarargs() throws Exception { doTest(); } public void testImmediatelyAfterRBrace() throws Exception { // IDEADEV-28811 CodeStyleSettingsManager.getInstance(getProject()).getCurrentSettings().CLASS_BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE;