Reports usages of classes in field types and in method signatures where the class is less visible than the field or the method.

Examples are a public method which returns a private inner class, or a protected field whose type is a package-visible class.
While legal Java, such fields and methods aren't useful outside of the visibility scope of the classes used in the field or the method.

In addition to that, in Java 9 a module may hide some of its classes by not exporting their packages.
If the public API of a class in an exported package references a class from non-exported package, such API isn't useful outside of the module.

The options of what is checked are: