3

I'm using ClassPath.getAllClasses from Guava to find in runtime classes that implement a certain interface. When used with rt.jar it finds many classes from sun.* and similar packages and I'd like to filter them out.

I want to reuse the mechanism used by Eclipse and maybe other java compilers to warn about restricted API. Does this information reside JRE or hardcoded into Eclipse?

basin
  • 3,949
  • 2
  • 27
  • 63
  • 1
    I'm not familiar with that particular example. It may be hardcoded. But note that Java offers annotations like `@Deprecated` which can easily be analyzed, for example by using the **reflection API** of Java. – Zabuzard Aug 25 '18 at 15:26

1 Answers1

5

This information is stored in so-called Execution Environments profiles inside of Eclipse.

Because these profiles are originally an OSGi thing (see Bundle-RequiredExecutionEnvironment), the profiles are stored in the org.eclipse.osgi plugin/bundle in *.profile files that each contains a whitelist of the accessible packages (org.osgi.framework.system.packages), e. g. here for JavaSE-1.8.

If you create a new Java project you can choose either

  • an execution environment JRE which gives you access restriction errors for imports of e. g. sun.* packages or
  • a specific JRE without any access restriction to JRE packages

After project creation the chosen JRE can be changed in Project > Properties: Java Build Path, tab Libraries by selecting the JRE and clicking Edit....

In addition, since the Java Platform Module System, introduced with Java 9, the JRE itself restricts access to some packages (and instead of the file rt.jar there is the file modules).

howlger
  • 31,050
  • 11
  • 59
  • 99