From fa612bf031dec83b1a47897dbce28669cfa090fd Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 31 May 2013 16:07:49 +0400 Subject: [PATCH] introduce parameter object: copy javadoc for constructor from included params only (IDEA-108187) --- .../IntroduceParameterObjectProcessor.java | 12 +++++++++ .../copyJavadoc1/after/Test.java | 27 +++++++++++++++++++ .../copyJavadoc1/before/Test.java | 12 +++++++++ .../IntroduceParameterObjectTest.java | 18 +++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/after/Test.java create mode 100644 java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/before/Test.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java index dfcc7f1e1528..5fdf3f7bc0d4 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectProcessor.java @@ -26,6 +26,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; +import com.intellij.psi.impl.source.javadoc.PsiDocParamRef; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.GlobalSearchScope; @@ -40,6 +41,7 @@ import com.intellij.refactoring.introduceparameterobject.usageInfo.*; import com.intellij.refactoring.util.*; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityUtil; import com.intellij.util.containers.MultiMap; @@ -312,6 +314,16 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP for (PsiDocTag paramTag : paramTags) { final PsiElement[] dataElements = paramTag.getDataElements(); if (dataElements.length > 0) { + if (dataElements[0] instanceof PsiDocParamRef) { + final PsiReference reference = dataElements[0].getReference(); + if (reference != null) { + final PsiElement resolve = reference.resolve(); + if (resolve instanceof PsiParameter) { + final int parameterIndex = method.getParameterList().getParameterIndex((PsiParameter)resolve); + if (ArrayUtil.find(paramsToMerge, parameterIndex) < 0) continue; + } + } + } mergedTags.add((PsiDocTag)paramTag.copy()); } } diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/after/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/after/Test.java new file mode 100644 index 000000000000..8152842e2ec6 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/after/Test.java @@ -0,0 +1,27 @@ +class Test { + /** + * foo comment + * @param param + * @param s1 long1 description1 + */ + void foo(Param param, String s1) { + bar(param.getS(), s1); + } + + void bar(String s, String s1){} + + private static class Param { + private final String s; + + /** + * @param s long description + */ + private Param(String s) { + this.s = s; + } + + public String getS() { + return s; + } + } +} diff --git a/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/before/Test.java b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/before/Test.java new file mode 100644 index 000000000000..af7c82f2a1a2 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameterObject/copyJavadoc1/before/Test.java @@ -0,0 +1,12 @@ +class Test { + /** + * foo comment + * @param s long description + * @param s1 long1 description1 + */ + void foo(String s, String s1) { + bar(s, s1); + } + + void bar(String s, String s1){} +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterObjectTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterObjectTest.java index 3c4d815dff5b..905f87eb7615 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterObjectTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterObjectTest.java @@ -149,6 +149,24 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{ }); } + public void testCopyJavadoc1() throws Exception { + doTest(false, true, new Function() { + @Override + public VariableData[] fun(PsiMethod method) { + final PsiParameter[] parameters = method.getParameterList().getParameters(); + + final VariableData[] datas = new VariableData[parameters.length - 1]; + for (int i = 0; i < parameters.length - 1; i++) { + PsiParameter parameter = parameters[i]; + datas[i] = new VariableData(parameter); + datas[i].name = parameter.getName(); + datas[i].passAsParameter = true; + } + return datas; + } + }); + } + public void testTypeParametersWithChosenSubtype() throws Exception { doTest(false, true, new Function() { @Override