Inspectopedia
 
2024.3

Scope of variable is too broad

Info
New
Last modified: 03 December 2024

Reports any variable declarations that can be moved to a smaller scope.

This inspection is especially useful for Pascal style declarations at the beginning of a method. Additionally variables with too broad a scope are also often left behind after refactorings.

Example:

After the quick-fix is applied:

Configure the inspection:

  • Use the Only report variables that can be moved into inner blocks option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the sb variable above. However, it will be suggested for the following code:

    StringBuilder sb = new StringBuilder(a);
    if (flag) {
      sb.append(1);
    }
  • Use the Report variables with a new expression as initializer (potentially unsafe) option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the foo variable:

    class Foo {
      static List<Foo> fooList = new ArrayList<>();
      String bar;
    
      Foo(String bar) {
          this.bar = bar;
          fooList.add(this);
      }
    
      public static void main(String[] args) {
        // movement is possible even though is unsafe
        Foo foo = new Foo("bar");
        System.out.println(fooList.size());
        System.out.println(foo.bar);
      }
    }