NamedLikeContextualKeyword
Avoid naming of classes and methods that is similar to contextual keywords. When invoking such a method, qualify it.

Severity
WARNING

The problem

The problem we’re trying to prevent is clashes between the names of classes/methods and contextual keywords. Clashes can occur when (1.) naming a class/method, or (2.) when invoking.

When naming

Change problematic names for classes and methods.

class Foo {
  ...
  // This can clash with the contextual keyword "yield"
  void yield() {
    ...
  }
}

Another example:

// This can clash with Java modules (JPMS)
static class module {
  ...
}

When invoking

In recent versions of Java, yield is a restricted identifier:

class T {
  void yield() {}
  {
    yield();
  }
}
$ javac --release 20 T.java
T.java:3: error: invalid use of a restricted identifier 'yield'
    yield();
    ^
  (to invoke a method called yield, qualify the yield with a receiver or type name)
1 error

To invoke existing methods called yield, use qualified names:

class T {
  void yield() {}
  {
    this.yield();
  }
}
class T {
  static void yield() {}
  {
    T.yield();
  }
}
class T {
  void yield() {}
  class I {
    {
      T.this.yield();
    }
  }
}

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("NamedLikeContextualKeyword") to the enclosing element.