A method that always calls itself will cause a StackOverflowError.

```java
int oops() {
  return oops();
}
```

```
Exception in thread "main" java.lang.StackOverflowError
  at Test.oops(X.java:3)
  at Test.oops(X.java:3)
  ...
```

The fix may be to call another method with the same name:

```java
void process(String name, int id) {
  process(name, id); // error
  process(name, id, /*verbose=*/ true); // ok
}

void process(String name, int id, boolean verbose) {
  // ...
}
```

or to call the method on a different instance:

```java
class Delegate implements Processor {
  Processor delegate;

  void process(String name, int id) {
    process(name, id); // error
    delegate.process(name, id); // ok
  }
}
```
