Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: somr rewording and minor code edits

...

This code is noncompliant because even though variable i is not intentionally used outside the for loop. The , it is declared in method scope. One of the few scenarios where variable i would need to be declared local to the method if, for example, in method scope is when the loop contained contains a break statement and the value of i was inspected outside must be inspected after conclusion of the loop.

Compliant Solution

...

Code Block
bgColor#ccccff
public class Scope {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) { // contains declaration
      // Do operations
    }
  }
}

...

Code Block
bgColor#FFcccc
public class Foo {
  private int count;
  private static private final int MAX_COUNT = 10;

  public void counter() {
    count = 0;
    while (condition()) {
      /* ... */
      if (count++ > MAX_COUNT) {
	    return;
      } 
    }
  }

  //* No other method references count */
  /*/ but several other methods reference MAX_COUNT */
}

Compliant Solution

In this compliant solution, the count field is declared local to the counter method.

Code Block
bgColor#ccccff
public class Foo {
  private static private final int MAX_COUNT = 10;

  public void counter() {
    int count = 0;
    while (condition()) {
      /* ... */
      if (count++ > MAX_COUNT) { 
	    return;
      }
    }
  }

  /*/ No other method references count */
  //* but several other methods reference MAX_COUNT */
}

Applicability

Detecting local variables that are declared in a larger scope than is required by the code as written is straightforward and can eliminate the possibility of false positives.

...