This commit is contained in:
Bas Leijdekkers
2010-04-05 17:40:07 +02:00
parent b14939b868
commit f2a87f17bd
2 changed files with 20 additions and 13 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
* Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,34 +15,36 @@
*/
package com.siyeh.ig.j2me;
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
import com.intellij.psi.*;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.performance.VariableAccessVisitor;
import com.siyeh.ig.psiutils.ExpressionUtils;
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.JComponent;
import java.util.Set;
public class FieldRepeatedlyAccessedInspection extends BaseInspection {
/** @noinspection PublicField*/
public boolean m_ignoreFinalFields = false;
@Override
@NotNull
public String getID(){
return "FieldRepeatedlyAccessedInMethod";
}
@Override
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message(
"field.repeatedly.accessed.in.method.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... arg) {
final String fieldName = ((PsiNamedElement) arg[0]).getName();
@@ -51,12 +53,14 @@ public class FieldRepeatedlyAccessedInspection extends BaseInspection {
fieldName);
}
@Override
public JComponent createOptionsPanel() {
return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message(
"field.repeatedly.accessed.in.method.ignore.option"),
this, "m_ignoreFinalFields");
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new FieldRepeatedlyAccessedVisitor();
}
@@ -72,8 +76,11 @@ public class FieldRepeatedlyAccessedInspection extends BaseInspection {
method.accept(visitor);
final Set<PsiField> fields = visitor.getOveraccessedFields();
for(PsiField field : fields){
if(ExpressionUtils.isConstant(field) || m_ignoreFinalFields &&
field.hasModifierProperty(PsiModifier.FINAL)){
if(ExpressionUtils.isConstant(field)){
continue;
}
if(m_ignoreFinalFields &&
field.hasModifierProperty(PsiModifier.FINAL)){
continue;
}
registerError(nameIdentifier, field);
@@ -1,5 +1,5 @@
/*
* Copyright 2003-2005 Dave Griffith
* Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.siyeh.ig.performance;
package com.siyeh.ig.j2me;
import com.intellij.psi.*;
import com.siyeh.ig.psiutils.ControlFlowUtils;
@@ -21,17 +21,17 @@ import org.jetbrains.annotations.NotNull;
import java.util.*;
public class VariableAccessVisitor extends JavaRecursiveElementVisitor {
class VariableAccessVisitor extends JavaRecursiveElementVisitor {
private final Map<PsiField,Integer> m_accessCounts =
new HashMap<PsiField, Integer>(2);
private final Set<PsiField> m_overAccessedFields =
new HashSet<PsiField>(2);
@Override public void visitReferenceExpression(@NotNull PsiReferenceExpression ref) {
@Override public void visitReferenceExpression(
@NotNull PsiReferenceExpression ref) {
super.visitReferenceExpression(ref);
final PsiExpression qualifier = ref.getQualifierExpression();
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
return;
}
@@ -51,7 +51,7 @@ public class VariableAccessVisitor extends JavaRecursiveElementVisitor {
final Integer count = accessCounts.get(field);
if (count == null) {
accessCounts.put(field, 1);
} else if (count == 1) {
} else if (count.intValue() == 1) {
accessCounts.put(field, 2);
} else {
overAccessedFields.add(field);