introduce parameter object: copy javadoc for constructor from included params only (IDEA-108187)

This commit is contained in:
Anna Kozlova
2013-05-31 16:46:38 +04:00
parent 079d29ffaf
commit fa612bf031
4 changed files with 69 additions and 0 deletions
@@ -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());
}
}
@@ -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;
}
}
}
@@ -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){}
}
@@ -149,6 +149,24 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
});
}
public void testCopyJavadoc1() throws Exception {
doTest(false, true, new Function<PsiMethod, VariableData[]>() {
@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<PsiMethod, VariableData[]>() {
@Override