extract method: copy parameters annotations to the extracted method when applicable (IDEA-40617)

This commit is contained in:
Anna Kozlova
2014-12-01 18:37:34 +01:00
parent 900afda0d7
commit 4ea62b333e
4 changed files with 69 additions and 0 deletions

View File

@@ -1137,6 +1137,7 @@ public class ExtractMethodProcessor implements MatchProvider {
for (VariableData data : myVariableDatum) {
if (data.passAsParameter) {
PsiParameter parm = myElementFactory.createParameter(data.name, data.type);
copyParamAnnotations(parm);
if (isFinal) {
PsiUtil.setModifierProperty(parm, PsiModifier.FINAL, true);
}
@@ -1171,6 +1172,21 @@ public class ExtractMethodProcessor implements MatchProvider {
return (PsiMethod)myStyleManager.reformat(newMethod);
}
private void copyParamAnnotations(PsiParameter parm) {
final PsiVariable variable = PsiResolveHelper.SERVICE.getInstance(myProject).resolveReferencedVariable(parm.getName(), myElements[0]);
if (variable instanceof PsiParameter) {
final PsiModifierList modifierList = variable.getModifierList();
if (modifierList != null) {
for (PsiAnnotation annotation : modifierList.getAnnotations()) {
if (SuppressWarnings.class.getName().equals(annotation.getQualifiedName())) continue;
final PsiModifierList parmModifierList = parm.getModifierList();
LOG.assertTrue(parmModifierList != null, parm);
parmModifierList.add(annotation);
}
}
}
}
@NotNull
protected PsiMethodCallExpression generateMethodCall(PsiExpression instanceQualifier, final boolean generateArgs) throws IncorrectOperationException {
@NonNls StringBuilder buffer = new StringBuilder();