With proper use of access rules you can prevent using “internal” and/or “non-api” classes and methods. When you add a class or package as Forbidden or Discouraged the compiler show an error or warning when you use that class or class from the specified package. For a longer introduction of access rules you should read this short article.
For using combine access rules imagine the following situation:
- You have 2 projects, A and B.
- On the classpath of project A there is a jar file that is exported. The jar contains some “stable api”, “unstable api” and “non-api” public classes.
- Project B depends on project A.
You do not allow using “non-api” classes in project A so you set some Forbidden access rules on those classes / packages.
In project B you do not allow using “non-api” as well, but you do want to get a warning when using “unstable api”. In this case in project B you only have to set the additional Discouraged access rules if you check the Combine rules with the access rules of the exported project entries.