Package org.codehaus.commons.compiler

# Class AbstractCompiler

java.lang.Object
org.codehaus.commons.compiler.AbstractCompiler

All Implemented Interfaces:
  `ICompiler`

Direct Known Subclasses:
  `Compiler`, `Compiler`

public abstract class AbstractCompiler extends Object implements ICompiler
A base class and wrapper for
invalid reference

    Compiler

that implements all redundant API methods.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected File[]`
`bootClassPath`
This is always non-`null` for JVMs that support BOOTCLASSPATH (1.0-1.8), and this is always `null` for JVMs that don't (9+).
`protected ResourceCreator`
`classFileCreator`
Implements the "write side" of the JAVAC `-d` option.
`protected ResourceFinder`
`classFileFinder`
Implements the "read side" of the JAVAC `-d` option.
`protected File[]`
`classPath`
The classpath of the currently executing JRE.
`protected ErrorHandler`
`compileErrorHandler`
Stores the value configured with `setCompileErrorHandler(ErrorHandler)`.
`protected boolean`
`debugLines`
Implements the JAVAC `-g:lines` option.
`protected boolean`
`debugSource`
Implements the JAVAC `-g:source` option.
`protected boolean`
`debugVars`
Implements the JAVAC `-g:vars` option.
`protected File[]`
`extensionDirectories`
The list of extension directories of the currently executing JRE.
`Charset`
`sourceCharset`
Implements the JAVAC `-encoding` option.
`protected ResourceFinder`
`sourceFinder`
Implements the JAVAC `-sourcepath` option.
`protected int`
`sourceVersion`
`protected int`
`targetVersion`
`protected WarningHandler`
`warningHandler`
Stores the value configured with `setWarningHandler(WarningHandler)`.

### Fields inherited from interface org.codehaus.commons.compiler.ICompiler

`CREATE_NEXT_TO_SOURCE_FILE, FIND_NEXT_TO_SOURCE_FILE, NO_DESTINATION_DIRECTORY`

## Constructor Summary

Constructors
Constructor
Description
`AbstractCompiler()`

## Method Summary

Modifier and Type
Method
Description
`final boolean`
`compile(File[] sourceFiles)`
Reads a set of Java compilation units (a.k.a.
`void`
`setBootClassPath(File[] directoriesAndArchives)`
Equivalent of `--boot-class-path`.
`final void`
`setCharacterEncoding(String characterEncoding)`
`final void`
`setClassFileCreator(ResourceCreator classFileCreator)`
This `ResourceCreator` is used to store generated `.class` files.
`void`
`setClassFileFinder(ResourceFinder classFileFinder)`
This `ResourceFinder` is used to check whether a `.class` resource already exists and is younger than the `.java` resource from which it was generated.
`final void`
`setClassFileFinder(ResourceFinder destination, boolean rebuild)`
Equivalent with `setClassFileFinder(rebuild ? ResourceFinder.EMPTY_RESOURCE_FINDER : classFileFinder)`.
`void`
`setClassPath(File[] directoriesAndArchives)`
Equivalent of --class-path.
`void`
`setCompileErrorHandler(ErrorHandler compileErrorHandler)`
Installs an `ErrorHandler` which is invoked during compilation on each error.
`void`
`setDebugLines(boolean value)`
Equivalent of `-g:lines`.
`void`
`setDebugSource(boolean value)`
Equivalent of `-g:source`.
`void`
`setDebugVars(boolean value)`
Equivalent of `-g:vars`.
`final void`
`setDestinationDirectory(File destinationDirectory, boolean rebuild)`
Equivalent of -d and `-rebuild`.
`final void`
`setEncoding(Charset encoding)`
The equivalent of JAVA's "`-encoding`" command line option.
`void`
`setExtensionDirectories(File[] directories)`
Equivalent of `-extdirs`.
`void`
`setSourceCharset(Charset charset)`
Same as `ICompiler.setEncoding(Charset)`, but with a more precise name.
`void`
`setSourceFinder(ResourceFinder sourceFinder)`
Finds more `.java` resources that need to be compiled, i.e.
`void`
`setSourcePath(File[] directoriesAndArchives)`
Equivalent of `--source-path`.
`void`
`setSourceVersion(int version)`
Specifies the version of source code accepted, in analogy with JAVAC's `-source` command line option.
`void`
`setTargetVersion(int version)`
Generates class files that target a specified release of the virtual machine, in analogy with JAVAC's `-target` command line option.
`void`
`setWarningHandler(WarningHandler warningHandler)`
By default, warnings are discarded, but an application my install a custom `WarningHandler`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.codehaus.commons.compiler.ICompiler

`compile, setVerbose`

## Field Details

### sourceFinder

protected ResourceFinder sourceFinder
Implements the JAVAC `-sourcepath` option.

### classFileFinder

protected ResourceFinder classFileFinder
Implements the "read side" of the JAVAC `-d` option.

### classFileCreator

protected ResourceCreator classFileCreator
Implements the "write side" of the JAVAC `-d` option.

### sourceCharset

public Charset sourceCharset
Implements the JAVAC `-encoding` option.

### debugSource

protected boolean debugSource
Implements the JAVAC `-g:source` option.

### debugLines

protected boolean debugLines
Implements the JAVAC `-g:lines` option.

### debugVars

protected boolean debugVars
Implements the JAVAC `-g:vars` option.

### sourceVersion

protected int sourceVersion

### targetVersion

protected int targetVersion

### extensionDirectories

protected File[] extensionDirectories
The list of extension directories of the currently executing JRE. Empty for Java 9+, because the system property "java.ext.dirs" is not set in JRE 9+.

### classPath

protected File[] classPath
The classpath of the currently executing JRE.

### bootClassPath

@Nullable protected File[] bootClassPath
This is always non-`null` for JVMs that support BOOTCLASSPATH (1.0-1.8), and this is always `null` for JVMs that don't (9+).

### compileErrorHandler

@Nullable protected ErrorHandler compileErrorHandler
Stores the value configured with `setCompileErrorHandler(ErrorHandler)`.

### warningHandler

@Nullable protected WarningHandler warningHandler
Stores the value configured with `setWarningHandler(WarningHandler)`.

## Constructor Details

### AbstractCompiler

public AbstractCompiler()

## Method Details

### setSourceFinder

public void setSourceFinder(ResourceFinder sourceFinder)
Description copied from interface: `ICompiler`
Finds more `.java` resources that need to be compiled, i.e. implements JAVAC's `-sourcepath` option.

Specified by:
  `setSourceFinder` in interface `ICompiler`

### setClassFileFinder

public final void setClassFileFinder(ResourceFinder destination, boolean rebuild)
Description copied from interface: `ICompiler`
Equivalent with `setClassFileFinder(rebuild ? ResourceFinder.EMPTY_RESOURCE_FINDER : classFileFinder)`.

Specified by:
  `setClassFileFinder` in interface `ICompiler`

### setClassFileFinder

public void setClassFileFinder(ResourceFinder classFileFinder)
Description copied from interface: `ICompiler`
This `ResourceFinder` is used to check whether a `.class` resource already exists and is younger than the `.java` resource from which it was generated.

If it is impossible to check whether an already-compiled class file exists, or if you want to enforce recompilation, pass `ResourceFinder.EMPTY_RESOURCE_FINDER` as the classFileFinder.

The default is, as for JAVAC, `ICompiler.FIND_NEXT_TO_SOURCE_FILE`.

Specified by:
  `setClassFileFinder` in interface `ICompiler`
Parameters:
  `classFileFinder` - Special value `ICompiler.FIND_NEXT_TO_SOURCE_FILE` means ".class file is next to its source file, not in the destination directory"
See Also:
  - `ICompiler.FIND_NEXT_TO_SOURCE_FILE`

### setClassFileCreator

public final void setClassFileCreator(ResourceCreator classFileCreator)
Description copied from interface: `ICompiler`
This `ResourceCreator` is used to store generated `.class` files.

The default is, as for JAVAC, `ICompiler.CREATE_NEXT_TO_SOURCE_FILE`.

Specified by:
  `setClassFileCreator` in interface `ICompiler`
Parameters:
  `classFileCreator` - Stores the generated class files (a.k.a. "-d"); special value `ICompiler.CREATE_NEXT_TO_SOURCE_FILE` means "create each .class file in the same directory as its source file"
See Also:
  - `ICompiler.CREATE_NEXT_TO_SOURCE_FILE`

### compile

public final boolean compile(File[] sourceFiles) throws CompileException, IOException
Description copied from interface: `ICompiler`
Reads a set of Java compilation units (a.k.a. "source files") from the file system, compiles them into a set of "class files" and stores these in the file system. Additional source files are parsed and compiled on demand through the "source path" set of directories.

For example, if the source path comprises the directories "A/B" and "../C", then the source file for class "com.acme.Main" is searched in

  A/B/com/acme/Main.java
  ../C/com/acme/Main.java

Notice that it does make a difference whether you pass multiple source files to `ICompiler.compile(File[])` or if you invoke `ICompiler.compile(File[])` multiply: In the former case, the source files may contain arbitrary references among each other (even circular ones). In the latter case, only the source files on the source path may contain circular references, not the sourceFiles.

This method must be called exactly once after object construction.

Compile errors are reported as described at `ICompiler.setCompileErrorHandler(ErrorHandler)`.

Specified by:
  `compile` in interface `ICompiler`
Parameters:
  `sourceFiles` - Contain the compilation units to compile
Returns:
  `true` for backwards compatibility (return value can safely be ignored)
Throws:
  `CompileException` - Fatal compilation error, or the `CompileException` thrown be the installed compile error handler
  `IOException` - Occurred when reading from the sourceFiles

### setEncoding

public final void setEncoding(Charset encoding)
Description copied from interface: `ICompiler`
The equivalent of JAVA's "`-encoding`" command line option.

Specified by:
  `setEncoding` in interface `ICompiler`
See Also:
  - `ICompiler.setSourceCharset(Charset)`

### setSourceCharset

public void setSourceCharset(Charset charset)
Description copied from interface: `ICompiler`
Same as `ICompiler.setEncoding(Charset)`, but with a more precise name.

Specified by:
  `setSourceCharset` in interface `ICompiler`

### setCharacterEncoding

public final void setCharacterEncoding(@Nullable String characterEncoding)

Specified by:
  `setCharacterEncoding` in interface `ICompiler`

### setDebugLines

public void setDebugLines(boolean value)
Description copied from interface: `ICompiler`
Equivalent of `-g:lines`.

Specified by:
  `setDebugLines` in interface `ICompiler`

### setDebugVars

public void setDebugVars(boolean value)
Description copied from interface: `ICompiler`
Equivalent of `-g:vars`.

Specified by:
  `setDebugVars` in interface `ICompiler`

### setDebugSource

public void setDebugSource(boolean value)
Description copied from interface: `ICompiler`
Equivalent of `-g:source`.

Specified by:
  `setDebugSource` in interface `ICompiler`

### setSourceVersion

public void setSourceVersion(int version)
Description copied from interface: `ICompiler`
Specifies the version of source code accepted, in analogy with JAVAC's `-source` command line option. May be ignored by an implementation (e.g. the `janino` implementation always accepts the language features as described on the home page). Allowed values, and the default value, depend on the implementation. `-1` means to use a default version.

Specified by:
  `setSourceVersion` in interface `ICompiler`

### setTargetVersion

public void setTargetVersion(int version)
Description copied from interface: `ICompiler`
Generates class files that target a specified release of the virtual machine, in analogy with JAVAC's `-target` command line option. Allowed values depend on the implementation. The default value also depends on the implementation. The only invariant is that the generated class files are suitable for the currently executing JVM. `-1` means to use a default version.

Specified by:
  `setTargetVersion` in interface `ICompiler`

### setSourcePath

public void setSourcePath(File[] directoriesAndArchives)
Description copied from interface: `ICompiler`
Equivalent of `--source-path`.

Equivalent with `setSourceFinder(new PathResourceFinder(directoriesAndArchives))`.

Specified by:
  `setSourcePath` in interface `ICompiler`

### setBootClassPath

public void setBootClassPath(File[] directoriesAndArchives)
Description copied from interface: `ICompiler`
Equivalent of `--boot-class-path`.

Specified by:
  `setBootClassPath` in interface `ICompiler`

### setExtensionDirectories

public void setExtensionDirectories(File[] directories)
Description copied from interface: `ICompiler`
Equivalent of `-extdirs`.

Specified by:
  `setExtensionDirectories` in interface `ICompiler`

### setClassPath

public void setClassPath(File[] directoriesAndArchives)
Description copied from interface: `ICompiler`
Equivalent of --class-path.

Specified by:
  `setClassPath` in interface `ICompiler`

### setDestinationDirectory

public final void setDestinationDirectory(@Nullable File destinationDirectory, boolean rebuild)
Description copied from interface: `ICompiler`
Equivalent of -d and `-rebuild`.

Overrides any previously configured `class file finder` and `class file creator`.

Specified by:
  `setDestinationDirectory` in interface `ICompiler`
Parameters:
  `destinationDirectory` - `ICompiler.NO_DESTINATION_DIRECTORY` means "create .class resources in the directory of the .java resource from which they are generated"
See Also:
  - `ICompiler.NO_DESTINATION_DIRECTORY`
  - `ICompiler.setClassFileFinder(ResourceFinder)`
  - `ICompiler.setClassFileCreator(ResourceCreator)`

### setCompileErrorHandler

public void setCompileErrorHandler(@Nullable ErrorHandler compileErrorHandler)
Description copied from interface: `ICompiler`
Installs an `ErrorHandler` which is invoked during compilation on each error. (By default, the compilation throws a `CompileException` on the first error and terminates.)

If the given `ErrorHandler` throws a `CompileException`, then the compilation terminates and the exception is propagated.

If the given `ErrorHandler` does not throw a `CompileException` but completes normally, then the compilation may or may not continue, depending on the error. Iff the compilation of a compilation unit completes normally but errors were reported, then it will throw a `CompileException` indicating the number of errors.

In other words: The `ErrorHandler` may throw a `CompileException` or not, but the compilation will definitely throw a `CompileException` if one or more compile errors have occurred.

Specified by:
  `setCompileErrorHandler` in interface `ICompiler`
Parameters:
  `compileErrorHandler` - `null` to restore the default behavior (throwing a `CompileException`)

### setWarningHandler

public void setWarningHandler(@Nullable WarningHandler warningHandler)
Description copied from interface: `ICompiler`
By default, warnings are discarded, but an application my install a custom `WarningHandler`.

Specified by:
  `setWarningHandler` in interface `ICompiler`
Parameters:
  `warningHandler` - `null` to indicate that no warnings be issued