mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix "Field repeatedly accessed in method" bug
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
|
||||
* Copyright 2003-2011 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.
|
||||
@@ -29,13 +29,14 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor {
|
||||
new HashSet<PsiField>(2);
|
||||
|
||||
@Override public void visitReferenceExpression(
|
||||
@NotNull PsiReferenceExpression ref) {
|
||||
super.visitReferenceExpression(ref);
|
||||
final PsiExpression qualifier = ref.getQualifierExpression();
|
||||
@NotNull PsiReferenceExpression referenceExpression) {
|
||||
super.visitReferenceExpression(referenceExpression);
|
||||
final PsiExpression qualifier =
|
||||
referenceExpression.getQualifierExpression();
|
||||
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
|
||||
return;
|
||||
}
|
||||
final PsiElement element = ref.resolve();
|
||||
final PsiElement element = referenceExpression.resolve();
|
||||
if (!(element instanceof PsiField)) {
|
||||
return;
|
||||
}
|
||||
@@ -44,15 +45,15 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor {
|
||||
if (overAccessedFields.contains(field)) {
|
||||
return;
|
||||
}
|
||||
if (ControlFlowUtils.isInLoop(field)) {
|
||||
if (ControlFlowUtils.isInLoop(referenceExpression)) {
|
||||
overAccessedFields.add(field);
|
||||
}
|
||||
final Map<PsiField,Integer> accessCounts = m_accessCounts;
|
||||
final Integer count = accessCounts.get(field);
|
||||
if (count == null) {
|
||||
accessCounts.put(field, 1);
|
||||
accessCounts.put(field, Integer.valueOf(1));
|
||||
} else if (count.intValue() == 1) {
|
||||
accessCounts.put(field, 2);
|
||||
accessCounts.put(field, Integer.valueOf(2));
|
||||
} else {
|
||||
overAccessedFields.add(field);
|
||||
}
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.siyeh.igtest.j2me.field_repeatedly_accessed;
|
||||
|
||||
public class FieldRepeatedlyAccessed {
|
||||
|
||||
String s = "";
|
||||
|
||||
void foo() {
|
||||
while(true) {
|
||||
System.out.println(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problems>
|
||||
|
||||
<problem>
|
||||
<file>FieldRepeatedlyAccessed.java</file>
|
||||
<line>7</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Field repeatedly accessed in method</problem_class>
|
||||
<description>Field 's' accessed repeatedly in method <code>foo(0</code> #loc</description>
|
||||
</problem>
|
||||
</problems>
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.siyeh.ig.j2me;
|
||||
|
||||
import com.siyeh.ig.IGInspectionTestCase;
|
||||
|
||||
public class FieldRepeatedlyAccessedInspectionTest extends IGInspectionTestCase {
|
||||
|
||||
public void test() throws Exception {
|
||||
doTest("com/siyeh/igtest/j2me/field_repeatedly_accessed",
|
||||
new FieldRepeatedlyAccessedInspection());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user