change signature: java: store typed modifiers

This commit is contained in:
anna
2010-09-14 20:38:08 +04:00
parent 34052cd161
commit 0788e8a7e1
4 changed files with 55 additions and 1 deletions
@@ -26,6 +26,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.CanonicalTypes;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
import org.jetbrains.annotations.NotNull;
@@ -155,6 +156,7 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
private static class MyJavaChangeInfo extends JavaChangeInfoImpl {
private PsiMethod mySuperMethod;
private String[] myModifiers;
private MyJavaChangeInfo(String newVisibility,
PsiMethod method,
CanonicalTypes.Type newType,
@@ -164,6 +166,16 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
super(newVisibility, method, method.getName(), newType, newParms, newExceptions, false,
new HashSet<PsiMethod>(),
new HashSet<PsiMethod>(), oldName);
final PsiParameter[] parameters = method.getParameterList().getParameters();
myModifiers = new String[parameters.length];
for (int i = 0; i < parameters.length; i++) {
PsiParameter parameter = parameters[i];
final PsiModifierList modifierList = parameter.getModifierList();
if (modifierList != null) {
final String text = modifierList.getText();
myModifiers[i] = text;
}
}
}
@Override
@@ -181,6 +193,10 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
public void setSuperMethod(PsiMethod superMethod) {
mySuperMethod = superMethod;
}
public String[] getModifiers() {
return myModifiers;
}
}
@Override
@@ -254,7 +270,25 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
oldParameterNames = info.getOldParameterNames();
oldParameterTypes = info.getOldParameterTypes();
}
});
}) {
@Override
protected void performRefactoring(UsageInfo[] usages) {
super.performRefactoring(usages);
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(method.getProject());
final PsiParameter[] parameters = method.getParameterList().getParameters();
for (int i = 0; i < info.getModifiers().length; i++) {
final String modifier = info.getModifiers()[i];
final PsiModifierList modifierList = parameters[i].getModifierList();
if (modifierList != null && !Comparing.strEqual(modifier, modifierList.getText())) {
final PsiModifierList newModifierList =
elementFactory.createParameterFromText(modifier + " type name", method).getModifierList();
if (newModifierList != null) {
modifierList.replace(newModifierList);
}
}
}
}
};
}
@Override