Class SimpleCompiler
- All Implemented Interfaces:
ICookable
,ISimpleCompiler
SimpleCompiler
object, proceed as described for ISimpleCompiler
. Alternatively, a number
of "convenience constructors" exist that execute the described steps instantly.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ClassFile[]
Null
before cooking, non-null
after cooking.private ClassLoaderIClassLoader
private ErrorHandler
private boolean
private boolean
private boolean
private ClassLoader
private static final Logger
private EnumSet<JaninoOption>
private ClassLoader
private int
private int
private WarningHandler
-
Constructor Summary
ConstructorsConstructorDescriptionSimpleCompiler
(String fileName) Equivalent toSimpleCompiler
(String fileName, InputStream is) Equivalent toSimpleCompiler
(String fileName, Reader in) Equivalent toSimpleCompiler
(Scanner scanner, ClassLoader parentClassLoader) Equivalent to -
Method Summary
Modifier and TypeMethodDescriptionprivate ClassFile[]
private void
protected Java.Type[]
classesToTypes
(Location location, Class<?>[] classes) protected Java.Type
classToType
(Location location, Class<?> clazz) protected final ClassLoader
compileToClassLoader
(Java.AbstractCompilationUnit abstractCompilationUnit) Compiles the given compilation unit.final void
Scans, parses and compiles a given compilation unit from the givenReader
.void
cook
(Java.AbstractCompilationUnit abstractCompilationUnit) Cooks this compilation unit directly.void
Scans, parses and compiles a given compilation unit from the given scanner.boolean
TwoSimpleCompiler
s are regarded equal iff Both are objects of the same class (e.g.Returns aClassLoader
object through which the previously compiled classes can be accessed.private ClassLoader
int
hashCode()
static void
protected Java.Type
optionalClassToType
(Location location, Class<?> clazz) options()
options
(EnumSet<JaninoOption> options) Sets the options for all future compilations.void
setCompileErrorHandler
(ErrorHandler compileErrorHandler) Installs anErrorHandler
which is invoked during compilation on each error.void
setDebuggingInformation
(boolean debugSource, boolean debugLines, boolean debugVars) Determines what kind of debugging information is included in the generates classes.void
setParentClassLoader
(ClassLoader parentClassLoader) The "parent class loader" is used to load referenced classes.void
setSourceVersion
(int version) Controls the language elements that are accepted by theParser
.void
setTargetVersion
(int version) Controls the .class files that are generated by theUnitCompiler
.void
setWarningHandler
(WarningHandler warningHandler) By default, warnings are discarded, but an application my install a customWarningHandler
which is invoked for each warning.Methods inherited from class org.codehaus.commons.compiler.Cookable
cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile
-
Field Details
-
LOGGER
-
parentClassLoader
-
classLoaderIClassLoader
-
compileErrorHandler
-
warningHandler
-
debugSource
private boolean debugSource -
debugLines
private boolean debugLines -
debugVars
private boolean debugVars -
sourceVersion
private int sourceVersion -
targetVersion
private int targetVersion -
options
-
classFiles
Null
before cooking, non-null
after cooking. -
getBytecodesCache
-
getClassLoaderCache
-
-
Constructor Details
-
SimpleCompiler
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, in);
- Throws:
IOException
CompileException
- See Also:
-
SimpleCompiler
public SimpleCompiler(@Nullable String fileName, InputStream is) throws IOException, CompileException Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, is);
- Throws:
IOException
CompileException
- See Also:
-
SimpleCompiler
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName);
- Throws:
IOException
CompileException
- See Also:
-
SimpleCompiler
public SimpleCompiler(Scanner scanner, @Nullable ClassLoader parentClassLoader) throws IOException, CompileException Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.setParentClassLoader(parentClassLoader); sc.cook(scanner);
-
SimpleCompiler
public SimpleCompiler()
-
-
Method Details
-
main
- Throws:
Exception
-
setParentClassLoader
Description copied from interface:ISimpleCompiler
The "parent class loader" is used to load referenced classes. Useful values are:System.getSystemClassLoader()
The running JVM's class path Thread.currentThread().getContextClassLoader()
ornull
The class loader effective for the invoking thread ClassLoaders.BOOTCLASSPATH_CLASS_LOADER
The running JVM's boot class path The parent class loader defaults to the current thread's context class loader.
- Specified by:
setParentClassLoader
in interfaceISimpleCompiler
-
setDebuggingInformation
public void setDebuggingInformation(boolean debugSource, boolean debugLines, boolean debugVars) Description copied from interface:ISimpleCompiler
Determines what kind of debugging information is included in the generates classes. The default is typically "-g:none
".- Specified by:
setDebuggingInformation
in interfaceISimpleCompiler
-
cook
Scans, parses and compiles a given compilation unit from the givenReader
. After completion,getClassLoader()
returns aClassLoader
that allows for access to the compiled classes.- Specified by:
cook
in interfaceICookable
- Specified by:
cook
in classCookable
- Parameters:
fileName
- Used when reporting errors and warnings- Throws:
CompileException
IOException
-
cook
Scans, parses and compiles a given compilation unit from the given scanner. After completion,getClassLoader()
returns aClassLoader
that allows for access to the compiled classes.- Throws:
CompileException
IOException
-
cook
Cooks this compilation unit directly.- Throws:
CompileException
-
getClassFiles
- Returns:
- The
ClassFile
s that were generated during cooking
-
setSourceVersion
public void setSourceVersion(int version) Controls the language elements that are accepted by theParser
.- Specified by:
setSourceVersion
in interfaceICookable
- See Also:
-
setTargetVersion
public void setTargetVersion(int version) Controls the .class files that are generated by theUnitCompiler
.- Specified by:
setTargetVersion
in interfaceICookable
- See Also:
-
getBytecodes
- Specified by:
getBytecodes
in interfaceICookable
- Returns:
- The generated Java bytecode; maps class name to bytes
-
getBytecodes2
-
getClassLoader
Description copied from interface:ISimpleCompiler
Returns aClassLoader
object through which the previously compiled classes can be accessed. ThisClassLoader
can be used for subsequentISimpleCompiler
s in order to compile compilation units that use types (e.g. declare derived types) declared in the previous one.This method must only be called after exactly one of the
ICookable.cook(String, java.io.Reader)
methods was called.- Specified by:
getClassLoader
in interfaceISimpleCompiler
-
getClassLoader2
-
equals
TwoSimpleCompiler
s are regarded equal iff- Both are objects of the same class (e.g. both are
ScriptEvaluator
s) - Both generated functionally equal classes as seen by
Object.equals(Object)
- Both are objects of the same class (e.g. both are
-
hashCode
public int hashCode() -
setCompileErrorHandler
Description copied from interface:ISimpleCompiler
Installs anErrorHandler
which is invoked during compilation on each error. (By default, the compilation throws aCompileException
on the first error and terminates.)If the given
ErrorHandler
throws aCompileException
, then the compilation terminates and the exception is propagated.If the given
ErrorHandler
does not throw aCompileException
but completes normally, then the compilation may or may not continue, depending on the error. Iff the compilation completes normally but errors were reported, then it will throw aCompileException
indicating the number of errors.In other words: The
ErrorHandler
may throw aCompileException
or not, but the compilation will definitely throw aCompileException
if one or more compile errors have occurred.- Specified by:
setCompileErrorHandler
in interfaceISimpleCompiler
- Parameters:
compileErrorHandler
-null
to restore the default behavior (throwing aCompileException
)
-
setWarningHandler
Description copied from interface:ISimpleCompiler
By default, warnings are discarded, but an application my install a customWarningHandler
which is invoked for each warning. If, for some untypical reason, that warning handler wants to terminate the compilation as quickly as possible, then it would throw aCompileException
.- Specified by:
setWarningHandler
in interfaceISimpleCompiler
- Parameters:
warningHandler
-null
to indicate that no warnings be issued
-
options
- Returns:
- A reference to the currently effective compilation options; changes to it take effect immediately
-
options
Sets the options for all future compilations. -
optionalClassToType
-
classToType
-
classesToTypes
-
compileToClassLoader
protected final ClassLoader compileToClassLoader(Java.AbstractCompilationUnit abstractCompilationUnit) throws CompileException Compiles the given compilation unit. (A "compilation unit" is typically the contents of a Java source file.)- Parameters:
abstractCompilationUnit
- The parsed compilation unit- Returns:
- The
ClassLoader
into which the compiled classes were defined - Throws:
CompileException
-
assertUncooked
private void assertUncooked()- Throws:
IllegalStateException
- This SimpleCompiler is already cooked
-
assertCooked
- Returns:
- The
ClassFile
s that were created when thisSimpleCompiler
wasCookable.cook(Reader)
ed - Throws:
IllegalStateException
- This SimpleCompiler is not yet cooked
-