diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index eedfda8795c3..8a9eca38a529 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -840,6 +840,11 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr final int idx = Arrays.binarySearch(oldParameterNames, oldParamName); return idx >= 0 && idx == method.getParameterList().getParameterIndex(parameter) && changeInfo.getNewParameters()[idx].getOldIndex() == idx; } + }, new Condition() { + @Override + public boolean value(String paramName) { + return Arrays.binarySearch(oldParameterNames, paramName) >= 0; + } }); } diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 888c05d932a5..f2ac34e8aed0 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -1048,9 +1048,16 @@ public class RefactoringUtil { fixJavadocsForParams(method, newParameters, Condition.FALSE); } + public static void fixJavadocsForParams(PsiMethod method, + Set newParameters, + Condition> eqCondition) throws IncorrectOperationException { + fixJavadocsForParams(method, newParameters, eqCondition, Condition.TRUE); + } + public static void fixJavadocsForParams(PsiMethod method, Set newParameters, - Condition> eqCondition) throws IncorrectOperationException { + Condition> eqCondition, + Condition matchedToOldParam) throws IncorrectOperationException { final PsiDocComment docComment = method.getDocComment(); if (docComment == null) return; final PsiParameter[] parameters = method.getParameterList().getParameters(); @@ -1082,6 +1089,14 @@ public class RefactoringUtil { } List newTags = new ArrayList(); + + for (PsiDocTag paramTag : paramTags) { + final String paramName = getNameOfReferencedParameter(paramTag); + if (!tagForParam.containsValue(paramTag) && !matchedToOldParam.value(paramName)) { + newTags.add((PsiDocTag)paramTag.copy()); + } + } + for (PsiParameter parameter : parameters) { if (tagForParam.containsKey(parameter)) { final PsiDocTag psiDocTag = tagForParam.get(parameter); diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3.java new file mode 100644 index 000000000000..8a6442c0b710 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3.java @@ -0,0 +1,12 @@ +class X { + + /** + * Has a method called {@link #mymethod(boolean)}. + */ + public class TestRefactorLink { + /** + * @param x aparam + */ + public void mymethod(boolean a) { } + } +} diff --git a/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3_after.java b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3_after.java new file mode 100644 index 000000000000..94de132dd36b --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ParamJavadoc3_after.java @@ -0,0 +1,13 @@ +class X { + + /** + * Has a method called {@link #mymethod(boolean, boolean)}. + */ + public class TestRefactorLink { + /** + * @param x aparam + * @param b + */ + public void mymethod(boolean a, boolean b) { } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java index 4cd9936b02cf..546c8c69d91c 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java @@ -189,6 +189,13 @@ public class ChangeSignatureTest extends ChangeSignatureBaseTest { }, false); } + public void testParamJavadoc3() { + doTest(null, new ParameterInfoImpl[]{ + new ParameterInfoImpl(0, "a", PsiType.BOOLEAN), + new ParameterInfoImpl(-1, "b", PsiType.BOOLEAN), + }, false); + } + public void testJavadocNoNewLineInserted() { doTest(null, new ParameterInfoImpl[]{ new ParameterInfoImpl(0, "newArgs", PsiType.DOUBLE),