diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeInfoImpl.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeInfoImpl.java index 286d14d54d1e..d411e704c8c1 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeInfoImpl.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeInfoImpl.java @@ -186,9 +186,10 @@ public class JavaChangeInfoImpl extends UserDataHolderBase implements JavaChange } else { final ParameterInfoImpl lastNewParm = this.newParms[this.newParms.length - 1]; - obtainsVarags = lastNewParm.isVarargType(); - retainsVarargs = lastNewParm.oldParameterIndex >= 0 && obtainsVarags; - arrayToVarargs = retainsVarargs && oldParameterTypes[lastNewParm.oldParameterIndex].endsWith("[]"); + boolean isVarargs = lastNewParm.isVarargType(); + obtainsVarags = isVarargs && lastNewParm.oldParameterIndex < 0; + retainsVarargs = lastNewParm.oldParameterIndex >= 0 && oldParameterTypes[lastNewParm.oldParameterIndex].endsWith("...") && isVarargs; + arrayToVarargs = lastNewParm.oldParameterIndex >= 0 && oldParameterTypes[lastNewParm.oldParameterIndex].endsWith("[]") && isVarargs; } if (isNameChanged) { diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType.java new file mode 100644 index 000000000000..00978ca68680 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType.java @@ -0,0 +1,7 @@ +class Test { + void foo(String[] s, int a) {} + + { + foo("a", 1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType_after.java b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType_after.java new file mode 100644 index 000000000000..8318a7ce5505 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ReorderWithVarargsFromSimpleType_after.java @@ -0,0 +1,7 @@ +class Test { + void foo(int a, String... s) {} + + { + foo(1, "a"); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignatureTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignatureTest.java index 4cb90b9c33d7..cfda46affbbf 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignatureTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignatureTest.java @@ -357,6 +357,13 @@ public class ChangeSignatureTest extends ChangeSignatureBaseTest { }, false); } + public void testReorderWithVarargsFromSimpleType() { + doTest(null, new ParameterInfoImpl[]{ + new ParameterInfoImpl(1), + new ParameterInfoImpl(0, "s", myFactory.createTypeFromText("java.lang.String...", getFile())) + }, false); + } + public void testIntroduceParameterWithDefaultValueInHierarchy() { doTest(null, new ParameterInfoImpl[]{new ParameterInfoImpl(-1, "i", PsiType.INT, "0")}, false); }