Class SimpleCompiler
- java.lang.Object
-
- org.codehaus.commons.compiler.Cookable
-
- org.codehaus.janino.SimpleCompiler
-
- All Implemented Interfaces:
ICookable
,ISimpleCompiler
public class SimpleCompiler extends Cookable implements ISimpleCompiler
To set up aSimpleCompiler
object, proceed as described forISimpleCompiler
. Alternatively, a number of "convenience constructors" exist that execute the described steps instantly.
-
-
Field Summary
Fields Modifier and Type Field Description private ClassFile[]
classFiles
Null
before cooking, non-null
after cooking.private ClassLoaderIClassLoader
classLoaderIClassLoader
private ErrorHandler
compileErrorHandler
private boolean
debugLines
private boolean
debugSource
private boolean
debugVars
private java.util.Map<java.lang.String,byte[]>
getBytecodesCache
private java.lang.ClassLoader
getClassLoaderCache
private static java.util.logging.Logger
LOGGER
private java.util.EnumSet<JaninoOption>
options
private java.lang.ClassLoader
parentClassLoader
private int
sourceVersion
private int
targetVersion
private WarningHandler
warningHandler
-
Constructor Summary
Constructors Constructor Description SimpleCompiler()
SimpleCompiler(java.lang.String fileName)
Equivalent toSimpleCompiler(java.lang.String fileName, java.io.InputStream is)
Equivalent toSimpleCompiler(java.lang.String fileName, java.io.Reader in)
Equivalent toSimpleCompiler(Scanner scanner, java.lang.ClassLoader parentClassLoader)
Equivalent to
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private ClassFile[]
assertCooked()
private void
assertUncooked()
protected Java.Type[]
classesToTypes(Location location, java.lang.Class<?>[] classes)
Converts an array ofClass
es into an array ofJava.Type
s.protected Java.Type
classToType(Location location, java.lang.Class<?> clazz)
Wraps a reflectionClass
in aJava.Type
object.protected java.lang.ClassLoader
compileToClassLoader(Java.AbstractCompilationUnit abstractCompilationUnit)
Compiles the given compilation unit.void
cook(java.lang.String fileName, java.io.Reader r)
Scans, parses and compiles a given compilation unit from the givenReader
.void
cook(Java.AbstractCompilationUnit abstractCompilationUnit)
Cooks this compilation unit directly.void
cook(Scanner scanner)
Scans, parses and compiles a given compilation unit from the given scanner.boolean
equals(java.lang.Object o)
TwoSimpleCompiler
s are regarded equal iff Both are objects of the same class (e.g.java.util.Map<java.lang.String,byte[]>
getBytecodes()
private java.util.Map<java.lang.String,byte[]>
getBytecodes2()
ClassFile[]
getClassFiles()
java.lang.ClassLoader
getClassLoader()
Returns aClassLoader
object through which the previously compiled classes can be accessed.private java.lang.ClassLoader
getClassLoader2()
int
hashCode()
static void
main(java.lang.String[] args)
protected Java.Type
optionalClassToType(Location location, java.lang.Class<?> clazz)
Wraps a reflectionClass
in aJava.Type
object.java.util.EnumSet<JaninoOption>
options()
SimpleCompiler
options(java.util.EnumSet<JaninoOption> options)
Sets the options for all future compilations.void
setCompileErrorHandler(ErrorHandler compileErrorHandler)
By default,CompileException
s are thrown on compile errors, but an application my install its ownErrorHandler
.void
setDebuggingInformation(boolean debugSource, boolean debugLines, boolean debugVars)
Determines what kind of debugging information is included in the generates classes.void
setParentClassLoader(java.lang.ClassLoader parentClassLoader)
The "parent class loader" is used to load referenced classes.void
setSourceVersion(int version)
JANINO ignores any set "source version", and throws "NYI"CompileException
when a language element is used which is not supported.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 customWarningHandler
.-
Methods inherited from class org.codehaus.commons.compiler.Cookable
cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile
-
-
-
-
Field Detail
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
parentClassLoader
private java.lang.ClassLoader parentClassLoader
-
classLoaderIClassLoader
@Nullable private ClassLoaderIClassLoader classLoaderIClassLoader
-
compileErrorHandler
@Nullable private ErrorHandler compileErrorHandler
-
warningHandler
@Nullable private WarningHandler warningHandler
-
debugSource
private boolean debugSource
-
debugLines
private boolean debugLines
-
debugVars
private boolean debugVars
-
sourceVersion
private int sourceVersion
-
targetVersion
private int targetVersion
-
options
private java.util.EnumSet<JaninoOption> options
-
getBytecodesCache
@Nullable private java.util.Map<java.lang.String,byte[]> getBytecodesCache
-
getClassLoaderCache
@Nullable private java.lang.ClassLoader getClassLoaderCache
-
-
Constructor Detail
-
SimpleCompiler
public SimpleCompiler(@Nullable java.lang.String fileName, java.io.Reader in) throws java.io.IOException, CompileException
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, in);
- Throws:
java.io.IOException
CompileException
- See Also:
SimpleCompiler()
,Cookable.cook(String, Reader)
-
SimpleCompiler
public SimpleCompiler(@Nullable java.lang.String fileName, java.io.InputStream is) throws java.io.IOException, CompileException
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, is);
- Throws:
java.io.IOException
CompileException
- See Also:
SimpleCompiler()
,Cookable.cook(String, InputStream)
-
SimpleCompiler
public SimpleCompiler(java.lang.String fileName) throws java.io.IOException, CompileException
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName);
- Throws:
java.io.IOException
CompileException
- See Also:
SimpleCompiler()
,Cookable.cookFile(String)
-
SimpleCompiler
public SimpleCompiler(Scanner scanner, @Nullable java.lang.ClassLoader parentClassLoader) throws java.io.IOException, CompileException
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.setParentClassLoader(parentClassLoader); sc.cook(scanner);
- Throws:
java.io.IOException
CompileException
- See Also:
SimpleCompiler()
,setParentClassLoader(ClassLoader)
,Cookable.cook(Reader)
-
SimpleCompiler
public SimpleCompiler()
-
-
Method Detail
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception
- Throws:
java.lang.Exception
-
setParentClassLoader
public void setParentClassLoader(@Nullable java.lang.ClassLoader parentClassLoader)
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
public final void cook(@Nullable java.lang.String fileName, java.io.Reader r) throws CompileException, java.io.IOException
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
java.io.IOException
-
cook
public void cook(Scanner scanner) throws CompileException, java.io.IOException
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
java.io.IOException
-
cook
public void cook(Java.AbstractCompilationUnit abstractCompilationUnit) throws CompileException
Cooks this compilation unit directly.- Throws:
CompileException
-
getClassFiles
public ClassFile[] getClassFiles()
- Returns:
- The
ClassFile
s that were generated during cooking
-
setSourceVersion
public void setSourceVersion(int version)
JANINO ignores any set "source version", and throws "NYI"CompileException
when a language element is used which is not supported.- Specified by:
setSourceVersion
in interfaceICookable
-
setTargetVersion
public void setTargetVersion(int version)
Description copied from interface:ICookable
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 interfaceICookable
-
getBytecodes
public java.util.Map<java.lang.String,byte[]> getBytecodes()
- Specified by:
getBytecodes
in interfaceICookable
- Returns:
- The generated Java bytecode; maps class name to bytes
-
getBytecodes2
private java.util.Map<java.lang.String,byte[]> getBytecodes2()
-
getClassLoader
public java.lang.ClassLoader 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
private java.lang.ClassLoader getClassLoader2()
-
equals
public boolean equals(@Nullable java.lang.Object o)
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)
- Overrides:
equals
in classjava.lang.Object
- Both are objects of the same class (e.g. both are
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
setCompileErrorHandler
public void setCompileErrorHandler(@Nullable ErrorHandler compileErrorHandler)
Description copied from interface:ISimpleCompiler
By default,CompileException
s are thrown on compile errors, but an application my install its ownErrorHandler
.Be aware that a single problem during compilation often causes a bunch of compile errors, so a good
ErrorHandler
counts errors and throws aCompileException
when a limit is reached.If the given
ErrorHandler
throwsCompileException
s, then the compilation is terminated and the exception is propagated.If the given
ErrorHandler
does not throwCompileException
s, then the compiler may or may not continue compilation, but must eventually throw aCompileException
.In other words: The
ErrorHandler
may throw aCompileException
or not, but the compiler must 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
public void setWarningHandler(@Nullable WarningHandler warningHandler)
Description copied from interface:ISimpleCompiler
By default, warnings are discarded, but an application my install a customWarningHandler
.- Specified by:
setWarningHandler
in interfaceISimpleCompiler
- Parameters:
warningHandler
-null
to indicate that no warnings be issued
-
options
public java.util.EnumSet<JaninoOption> options()
- Returns:
- A reference to the currently effective compilation options; changes to it take effect immediately
-
options
public SimpleCompiler options(java.util.EnumSet<JaninoOption> options)
Sets the options for all future compilations.
-
optionalClassToType
@Nullable protected Java.Type optionalClassToType(Location location, @Nullable java.lang.Class<?> clazz)
Wraps a reflectionClass
in aJava.Type
object.
-
classToType
protected Java.Type classToType(Location location, java.lang.Class<?> clazz)
Wraps a reflectionClass
in aJava.Type
object.
-
classesToTypes
protected Java.Type[] classesToTypes(Location location, @Nullable java.lang.Class<?>[] classes)
Converts an array ofClass
es into an array ofJava.Type
s.
-
compileToClassLoader
protected final java.lang.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:
java.lang.IllegalStateException
- This SimpleCompiler is already cooked
-
assertCooked
private ClassFile[] assertCooked()
- Returns:
- The
ClassFile
s that were created when thisSimpleCompiler
wasCookable.cook(Reader)
ed - Throws:
java.lang.IllegalStateException
- This SimpleCompiler is not yet cooked
-
-