From 3677585e9b0dd1998a425aa35a5946b5a1dd1ca7 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Wed, 4 Jun 2014 18:21:39 +0400 Subject: [PATCH] IDEA-103523 MethodMayBeStaticInspection replace qualified usages by class name (reused MakeMethodStaticProcessor) --- .../makeStatic/MakeMethodStaticProcessor.java | 1 + .../refactoring/makeStatic/Settings.java | 3 +- .../com/siyeh/ig/fixes/ChangeModifierFix.java | 15 ++------- .../MethodMayBeStaticInspection.java | 31 ++++++++++++++++++- 4 files changed, 34 insertions(+), 16 deletions(-) rename plugins/InspectionGadgets/{InspectionGadgetsAnalysis => }/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java (85%) diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java index bd8ed35c3cb7..de5efa573d8a 100644 --- a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java @@ -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) diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/Settings.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/Settings.java index 53c4335dfb27..c08de3870f0f 100644 --- a/java/java-impl/src/com/intellij/refactoring/makeStatic/Settings.java +++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/Settings.java @@ -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; diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ChangeModifierFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ChangeModifierFix.java index 8e3bf7974154..0e114abf03f4 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ChangeModifierFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ChangeModifierFix.java @@ -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); - } - } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java similarity index 85% rename from plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java rename to plugins/InspectionGadgets/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java index ab8934e0cce2..e73b6cc234d7 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MethodMayBeStaticInspection.java @@ -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 {