diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CanBeStaticVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CanBeStaticVisitor.java index a93af1208b44..c00a191d841a 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CanBeStaticVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CanBeStaticVisitor.java @@ -18,6 +18,11 @@ class CanBeStaticVisitor extends PsiRecursiveElementVisitor { m_canBeStatic = false; } } + else if (element instanceof PsiVariable) { + //can happen with initializers of inner classes referencing + //local variables or parameters from outer class + m_canBeStatic = false; + } } public boolean canBeStatic() { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/FieldMayBeStaticInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/FieldMayBeStaticInspection.java index 8d4003730924..0a865be3bb67 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/FieldMayBeStaticInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/FieldMayBeStaticInspection.java @@ -10,83 +10,91 @@ import com.siyeh.ig.*; import com.siyeh.ig.psiutils.ClassUtils; import com.siyeh.ig.psiutils.SideEffectChecker; -public class FieldMayBeStaticInspection extends FieldInspection { - private static final Logger s_logger = Logger.getInstance("FieldMayBeStaticInspection"); +public class FieldMayBeStaticInspection extends FieldInspection{ + private static final Logger s_logger = + Logger.getInstance("FieldMayBeStaticInspection"); private final MakeStaticFix fix = new MakeStaticFix(); - public String getDisplayName() { + public String getDisplayName(){ return "Field may be 'static'"; } - public String getGroupDisplayName() { + public String getGroupDisplayName(){ return GroupNames.PERFORMANCE_GROUP_NAME; } - public String buildErrorString(PsiElement location) { + public String buildErrorString(PsiElement location){ return "Field #ref may be 'static' #loc"; } - public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { + public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, + boolean onTheFly){ return new FieldMayBeStaticVisitor(this, inspectionManager, onTheFly); } - public InspectionGadgetsFix buildFix(PsiElement location) { + public InspectionGadgetsFix buildFix(PsiElement location){ return fix; } - private static class MakeStaticFix extends InspectionGadgetsFix { - public String getName() { + private static class MakeStaticFix extends InspectionGadgetsFix{ + public String getName(){ return "Make static"; } - public void applyFix(Project project, ProblemDescriptor descriptor) { - if(isQuickFixOnReadOnlyFile(project, descriptor)) return; - final PsiJavaToken m_fieldNameToken = (PsiJavaToken) descriptor.getPsiElement(); - try { + public void applyFix(Project project, ProblemDescriptor descriptor){ + if(isQuickFixOnReadOnlyFile(project, descriptor)){ + return; + } + final PsiJavaToken m_fieldNameToken = + (PsiJavaToken) descriptor.getPsiElement(); + try{ final PsiField field = (PsiField) m_fieldNameToken.getParent(); final PsiModifierList modifiers = field.getModifierList(); modifiers.setModifierProperty(PsiModifier.STATIC, true); - } catch (IncorrectOperationException e) { + } catch(IncorrectOperationException e){ s_logger.error(e); } } } - private static class FieldMayBeStaticVisitor extends BaseInspectionVisitor { - private FieldMayBeStaticVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) { + private static class FieldMayBeStaticVisitor extends BaseInspectionVisitor{ + private FieldMayBeStaticVisitor(BaseInspection inspection, + InspectionManager inspectionManager, + boolean isOnTheFly){ super(inspection, inspectionManager, isOnTheFly); } - public void visitField(PsiField field) { - if (field.hasModifierProperty(PsiModifier.STATIC)) { + public void visitField(PsiField field){ + if(field.hasModifierProperty(PsiModifier.STATIC)){ return; } - if (!field.hasModifierProperty(PsiModifier.FINAL)) { + if(!field.hasModifierProperty(PsiModifier.FINAL)){ return; } final PsiExpression initializer = field.getInitializer(); - if (initializer == null) { + if(initializer == null){ return; } - if (SideEffectChecker.mayHaveSideEffects(initializer)) { + if(SideEffectChecker.mayHaveSideEffects(initializer)){ return; } - if (!canBeStatic(initializer)) { + if(!canBeStatic(initializer)){ return; } final PsiType type = field.getType(); - if (type == null) { + if(type == null){ return; } - if (!ClassUtils.isImmutable(type)) { + if(!ClassUtils.isImmutable(type)){ return; } registerFieldError(field); } - private static boolean canBeStatic(PsiExpression initializer) { - final CanBeStaticVisitor canBeStaticVisitor = new CanBeStaticVisitor(); + private static boolean canBeStatic(PsiExpression initializer){ + final CanBeStaticVisitor canBeStaticVisitor = + new CanBeStaticVisitor(); initializer.accept(canBeStaticVisitor); return canBeStaticVisitor.canBeStatic(); }