Class Compiler

java.lang.Object
org.codehaus.janino.Compiler

public class Compiler extends Object
A simplified substitute for the javac tool. Usage:
 java org.codehaus.janino.Compiler \
           [ -d destination-dir ] \
           [ -sourcepath dirlist ] \
           [ -classpath dirlist ] \
           [ -extdirs dirlist ] \
           [ -bootclasspath dirlist ] \
           [ -encoding encoding ] \
           [ -verbose ] \
           [ -g:none ] \
           [ -g:{source,lines,vars} ] \
           [ -warn:pattern-list ] \
           source-file ...
 java org.codehaus.janino.Compiler -help
 
  • Field Details

    • FIND_NEXT_TO_SOURCE_FILE

      public static final ResourceFinder FIND_NEXT_TO_SOURCE_FILE
      Special value for "classFileResourceFinder".
    • CREATE_NEXT_TO_SOURCE_FILE

      public static final ResourceCreator CREATE_NEXT_TO_SOURCE_FILE
      Special value for "classFileResourceCreator".
    • NO_DESTINATION_DIRECTORY

      public static final File NO_DESTINATION_DIRECTORY
      Backwards compatibility -- previously, "null" was officially documented.
    • DEFAULT_WARNING_HANDLE_PATTERNS

      public static final StringPattern[] DEFAULT_WARNING_HANDLE_PATTERNS
  • Constructor Details

    • Compiler

      public Compiler(File[] optionalSourcePath, File[] classPath, File[] optionalExtDirs, File[] optionalBootClassPath, File destinationDirectory, String optionalCharacterEncoding, boolean verbose, boolean debugSource, boolean debugLines, boolean debugVars, StringPattern[] warningHandlePatterns, boolean rebuild)
      Initialize a Java™ compiler with the given parameters.

      Classes are searched in the following order:

      • If optionalBootClassPath is null:
        • Through the system class loader of the JVM that runs JANINO
      • If optionalBootClassPath is not null:
        • Through the optionalBootClassPath
      • If optionalExtDirs is not null:
        • Through the optionalExtDirs
      • Through the classPath
      • If optionalSourcePath is null:
        • Through source files found on the classPath
      • If optionalSourcePath is not null:
        • Through source files found on the sourcePath

      The file name of a class file that represents class "pkg.Example" is determined as follows:

      • If optionalDestinationDirectory is not NO_DESTINATION_DIRECTORY: <i>optionalDestinationDirectory</i>/pkg/Example.class
      • If optionalDestinationDirectory is NO_DESTINATION_DIRECTORY: dir1/dir2/Example.class (Assuming that the file name of the source file that declares the class was dir1/dir2/Any.java.)
      See Also:
    • Compiler

      public Compiler(ResourceFinder sourceFinder, IClassLoader iClassLoader, ResourceFinder classFileFinder, ResourceCreator classFileCreator, String optionalCharacterEncoding, boolean verbose, boolean debugSource, boolean debugLines, boolean debugVars, WarningHandler optionalWarningHandler)
      To mimic the behavior of JAVAC with a missing "-d" command line option, pass FIND_NEXT_TO_SOURCE_FILE as the classFileResourceFinder and CREATE_NEXT_TO_SOURCE_FILE as the classFileResourceCreator.

      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 classFileResourceFinder.

      Parameters:
      sourceFinder - Finds extra Java compilation units that need to be compiled (a.k.a. "-sourcepath")
      iClassLoader - Loads auxiliary IClasses (a.k.a. "-classpath"), e.g. new ClassLoaderIClassLoader(ClassLoader)
      classFileFinder - Where to look for up-to-date class files that need not be compiled (a.k.a. "-d")
      classFileCreator - Used to store generated class files (a.k.a. "-d")
      optionalWarningHandler - Used to issue warnings
  • Method Details

    • main

      public static void main(String[] args)
      Command line interface.
    • setCompileErrorHandler

      public void setCompileErrorHandler(UnitCompiler.ErrorHandler optionalCompileErrorHandler)
      Install a custom UnitCompiler.ErrorHandler. The default UnitCompiler.ErrorHandler prints the first 20 compile errors to System.err and then throws a CompileException.

      Passing null restores the default UnitCompiler.ErrorHandler.

      Notice that scan and parse errors are not redirected to this UnitCompiler.ErrorHandler, instead, they cause a CompileException to be thrown. Also, the Compiler may choose to throw CompileExceptions in certain, fatal compile error situations, even if an UnitCompiler.ErrorHandler is installed.

      In other words: In situations where compilation can reasonably continue after a compile error, the UnitCompiler.ErrorHandler is called; all other error conditions cause a CompileException to be thrown.

    • compile

      public boolean compile(File[] sourceFiles) throws CompileException, IOException
      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 compile(File[]) or if you invoke 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 setCompileErrorHandler(UnitCompiler.ErrorHandler).

      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
    • compile

      public boolean compile(Resource[] sourceResources) throws CompileException, IOException
      Parameters:
      sourceResources - Contain the compilation units to compile
      Returns:
      true for backwards compatibility (return value can safely be ignored)
      Throws:
      CompileException
      IOException
    • getClassFile

      public static File getClassFile(String className, File sourceFile, File optionalDestinationDirectory)
      Construct the name of a file that could store the byte code of the class with the given name.

      If optionalDestinationDirectory is non-null, the returned path is the optionalDestinationDirectory plus the package of the class (with dots replaced with file separators) plus the class name plus ".class". Example: "destdir/pkg1/pkg2/Outer$Inner.class"

      If optionalDestinationDirectory is null, the returned path is the directory of the sourceFile plus the class name plus ".class". Example: "srcdir/Outer$Inner.class"

      Parameters:
      className - E.g. "pkg1.pkg2.Outer$Inner"
      sourceFile - E.g. "srcdir/Outer.java"
      optionalDestinationDirectory - E.g. "destdir"
    • storeClassFile

      public void storeClassFile(ClassFile classFile, File sourceFile) throws IOException
      Store the byte code of this ClassFile in the file system. Directories are created as necessary.
      Parameters:
      classFile -
      sourceFile - Required to compute class file path if no destination directory given
      Throws:
      IOException