Note that to make editor code completion functionality work for a Java source file the
following classpaths must be available for it:
- The
ClassPath.BOOT type of classpath
is required or the source file will not be parsable and
code completion will be disabled. See also
org.netbeans.spi.java.queries.SourceLevelQueryImplementation .
- The
ClassPath.SOURCE type of classpath
is required or code completion will be disabled.
Providing this classpath will enable code completion, but only elements
defined on this classpath will be offered if the compile classpath is missing.
- The
ClassPath.COMPILE type of classpath
is recommended to be provide to make code completion work fully
by suggesting all classes against which the source is developed.
ClassPath.EXECUTE is also recommended for e.g. I18N functionality to work.
This should contain the full run-time classpath of the class, including its build
location (bytecode).
You should return these classpaths for the package root folder and any
files or folders inside it.
You should register classpaths for source files of all these types in
org.netbeans.api.java.classpath.GlobalPathRegistry when they are to be exposed in the GUI as available for use (e.g. for the editor's Fast Open dialog),
and unregister them when they are no longer to be exposed. Typically this is done as part of
ProjectOpenedHook.
It is also desirable to produce classpath information for compiled class files
(bytecode), including their package roots (whether a disk folder or a JAR root).
This will enable parsing of the class files, which is sometimes needed (e.g. for
expanding the class file node and seeing its members).
Compiled classes should have:
-
ClassPath.BOOT corresponding to the Java platform to be used with the classes.
-
ClassPath.EXECUTE containing the bytecode's package root itself, plus any other
libraries it needs to resolve against. Should normally be the same as the execute classpath
of the corresponding source files.
If no specific class path providers are available for a given source file or bytecode file,
i.e. null
is returned from all providers, there may be a fallback implementation
which would provide reasonable defaults. For source files, this could mean a boot classpath
corresponding to the default Java platform (i.e. the JDK being used to run the IDE); empty
compile and execute classpaths; and a sourcepath computed based on the package statement in the
source file (if this is possible). For class files, this could mean a boot classpath determined
as for source files, and an execute classpath containing the package root apparently owning the
class file (computed according to the class file's package information, if this is possible).