IDEA-103523 MethodMayBeStaticInspection replace qualified usages by class name (reused MakeMethodStaticProcessor)

This commit is contained in:
Dmitry Batkovich
2014-06-04 18:21:39 +04:00
parent 89905f65af
commit 3677585e9b
4 changed files with 34 additions and 16 deletions
@@ -112,6 +112,7 @@ public class MakeMethodStaticProcessor extends MakeMethodOrClassStaticProcessor<
final PsiModifierList modifierList = myMember.getModifierList();
modifierList.setModifierProperty(PsiModifier.STATIC, true);
modifierList.setModifierProperty(PsiModifier.FINAL, false);
modifierList.setModifierProperty(PsiModifier.DEFAULT, false);
}
protected void changeInternalUsage(InternalUsageInfo usage, PsiElementFactory factory)
@@ -55,8 +55,7 @@ public final class Settings {
}
public Settings(boolean replaceUsages, String classParameterName,
VariableData[] variableDatum) {
public Settings(boolean replaceUsages, @Nullable String classParameterName, @Nullable VariableData[] variableDatum) {
myReplaceUsages = replaceUsages;
myMakeClassParameter = classParameterName != null;
myClassParameterName = classParameterName;
@@ -29,18 +29,12 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public class ChangeModifierFix extends InspectionGadgetsFix {
public static final String FAMILY_NAME = "Change modifier";
@PsiModifier.ModifierConstant private final String modifierText;
private final String[] incompatibleModifiers;
public ChangeModifierFix(@NonNls @PsiModifier.ModifierConstant String modifierText) {
this.modifierText = modifierText;
this.incompatibleModifiers = null;
}
public ChangeModifierFix(String modifierText, String... incompatibleModifiers) {
this.modifierText = modifierText;
this.incompatibleModifiers = incompatibleModifiers;
}
@Override
@@ -53,7 +47,7 @@ public class ChangeModifierFix extends InspectionGadgetsFix {
@NotNull
@Override
public String getFamilyName() {
return "Change modifier";
return FAMILY_NAME;
}
@Override
@@ -70,10 +64,5 @@ public class ChangeModifierFix extends InspectionGadgetsFix {
return;
}
modifiers.setModifierProperty(modifierText, true);
if (incompatibleModifiers != null) {
for (String modifier : incompatibleModifiers) {
modifiers.setModifierProperty(modifier, false);
}
}
}
}
@@ -16,11 +16,16 @@
package com.siyeh.ig.performance;
import com.intellij.codeInspection.InspectionManager;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.makeStatic.MakeMethodStaticProcessor;
import com.intellij.refactoring.makeStatic.Settings;
import com.intellij.util.Processor;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
@@ -42,6 +47,7 @@ public class MethodMayBeStaticInspection extends BaseInspection {
private static final String IGNORE_DEFAULT_METHODS_ATTR_NAME = "m_ignoreDefaultMethods";
private static final String ONLY_PRIVATE_OR_FINAL_ATTR_NAME = "m_onlyPrivateOrFinal";
private static final String IGNORE_EMPTY_METHODS_ATTR_NAME = "m_ignoreEmptyMethods";
private static final String REPLACE_QUALIFIER_ATTR_NAME = "m_replaceQualifier";
/**
* @noinspection PublicField
*/
@@ -51,6 +57,7 @@ public class MethodMayBeStaticInspection extends BaseInspection {
*/
public boolean m_ignoreEmptyMethods = true;
public boolean m_ignoreDefaultMethods = true;
public boolean m_replaceQualifier = true;
@Override
@NotNull
@@ -66,7 +73,25 @@ public class MethodMayBeStaticInspection extends BaseInspection {
@Override
protected InspectionGadgetsFix buildFix(Object... infos) {
return new ChangeModifierFix(PsiModifier.STATIC, PsiModifier.DEFAULT);
return new InspectionGadgetsFix() {
@Override
public void doFix(Project project, ProblemDescriptor descriptor) {
final PsiMethod element = PsiTreeUtil.getParentOfType(descriptor.getPsiElement(), PsiMethod.class);
new MakeMethodStaticProcessor(element.getProject(), element, new Settings(m_replaceQualifier, null, null)).run();
}
@Override
@NotNull
public String getName() {
return InspectionGadgetsBundle.message("change.modifier.quickfix", PsiModifier.STATIC);
}
@NotNull
@Override
public String getFamilyName() {
return ChangeModifierFix.FAMILY_NAME;
}
};
}
@Override
@@ -75,6 +100,7 @@ public class MethodMayBeStaticInspection extends BaseInspection {
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("method.may.be.static.only.option"), ONLY_PRIVATE_OR_FINAL_ATTR_NAME);
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("method.may.be.static.empty.option"), IGNORE_EMPTY_METHODS_ATTR_NAME);
optionsPanel.addCheckbox("Ignore default methods", IGNORE_DEFAULT_METHODS_ATTR_NAME);
optionsPanel.addCheckbox("Replace qualifier by class name", REPLACE_QUALIFIER_ATTR_NAME);
return optionsPanel;
}
@@ -91,6 +117,9 @@ public class MethodMayBeStaticInspection extends BaseInspection {
if (!m_ignoreDefaultMethods) {
node.addContent(new Element("option").setAttribute("name", IGNORE_DEFAULT_METHODS_ATTR_NAME).setAttribute("value", "false"));
}
if (!m_replaceQualifier) {
node.addContent(new Element("option").setAttribute("name", REPLACE_QUALIFIER_ATTR_NAME).setAttribute("value", "false"));
}
}
private class MethodCanBeStaticVisitor extends BaseInspectionVisitor {