Reports anonymous classes that may be safely replaced with static inner classes. An anonymous class may be a static inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method.

A static inner class does not keep an implicit reference to its enclosing instance. This prevents a common cause of memory leaks and uses less memory per class instance.

The quick-fix extracts the anonymous class into a named static inner class.

Example:


  void sample() {
    Thread thread = new Thread(new Runnable() {
      @Override
      public void run() {
      }
    });
  }

After the quick-fix is applied:


  void sample() {
    Thread thread = new Thread(new Task());
  }

  private static class Task implements Runnable {
    @Override
    public void run() {
    }
  }