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 Collection<ClassFile> Nullbefore cooking, non-nullafter cooking.private ClassLoaderIClassLoaderprivate ErrorHandlerprivate booleanprivate booleanprivate booleanprivate static final booleanprivate ClassLoaderprivate static final Loggerprivate EnumSet<JaninoOption> private ClassLoaderprivate intprivate intprivate 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 Collection<ClassFile> private voidprotected Java.Type[]classesToTypes(Location location, Class<?>[] classes) protected Java.TypeclassToType(Location location, Class<?> clazz) protected final ClassLoadercompileToClassLoader(Java.AbstractCompilationUnit abstractCompilationUnit) Compiles the given compilation unit.final voidScans, parses and compiles a given compilation unit from the givenReader.voidcook(Java.AbstractCompilationUnit abstractCompilationUnit) Cooks this compilation unit directly.voidScans, parses and compiles a given compilation unit from the given scanner.private voidbooleanTwoSimpleCompilers are regarded equal iff Both are objects of the same class (e.g.Returns aClassLoaderobject through which the previously compiled classes can be accessed.private ClassLoaderinthashCode()static voidprotected Java.TypeoptionalClassToType(Location location, Class<?> clazz) options()options(EnumSet<JaninoOption> options) Sets the options for all future compilations.voidsetCompileErrorHandler(ErrorHandler compileErrorHandler) Installs anErrorHandlerwhich is invoked during compilation on each error.voidsetDebuggingInformation(boolean debugSource, boolean debugLines, boolean debugVars) Determines what kind of debugging information is included in the generates classes.voidsetParentClassLoader(ClassLoader parentClassLoader) The "parent class loader" is used to load referenced classes.voidsetSourceVersion(int version) Controls the language elements that are accepted by theParser.voidsetTargetVersion(int version) Controls the .class files that are generated by theUnitCompiler.voidsetWarningHandler(WarningHandler warningHandler) By default, warnings are discarded, but an application my install a customWarningHandlerwhich is invoked for each warning.Methods inherited from class Cookable
cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile
-
Field Details
-
disassembleClassFilesToStdout
private static final boolean disassembleClassFilesToStdout -
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
Nullbefore cooking, non-nullafter cooking. -
getBytecodesCache
-
getClassLoaderCache
-
-
Constructor Details
-
SimpleCompiler
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, in);- Throws:
IOExceptionCompileException- See Also:
-
SimpleCompiler
public SimpleCompiler(@Nullable String fileName, InputStream is) throws IOException, CompileException Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName, is);- Throws:
IOExceptionCompileException- See Also:
-
SimpleCompiler
Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.cook(fileName);- Throws:
IOExceptionCompileException- See Also:
-
SimpleCompiler
public SimpleCompiler(Scanner scanner, @Nullable ClassLoader parentClassLoader) throws IOException, CompileException Equivalent toSimpleCompiler sc = new SimpleCompiler(); sc.setParentClassLoader(parentClassLoader); sc.cook(scanner);- Throws:
IOExceptionCompileException- See Also:
-
SimpleCompiler
public SimpleCompiler()
-
-
Method Details
-
main
-
setParentClassLoader
Description copied from interface:ISimpleCompilerThe "parent class loader" is used to load referenced classes. Useful values are:System.getSystemClassLoader()The running JVM's class path Thread.currentThread().getContextClassLoader()ornullThe class loader effective for the invoking thread ClassLoaders.BOOTCLASSPATH_CLASS_LOADERThe running JVM's boot class path The parent class loader defaults to the current thread's context class loader.
- Specified by:
setParentClassLoaderin interfaceISimpleCompiler
-
setDebuggingInformation
public void setDebuggingInformation(boolean debugSource, boolean debugLines, boolean debugVars) Description copied from interface:ISimpleCompilerDetermines what kind of debugging information is included in the generates classes. The default is typically "-g:none".- Specified by:
setDebuggingInformationin interfaceISimpleCompiler
-
cook
Scans, parses and compiles a given compilation unit from the givenReader. After completion,getClassLoader()returns aClassLoaderthat allows for access to the compiled classes.- Specified by:
cookin interfaceICookable- Specified by:
cookin classCookable- Parameters:
fileName- Used when reporting errors and warnings- Throws:
CompileExceptionIOException
-
cook
Scans, parses and compiles a given compilation unit from the given scanner. After completion,getClassLoader()returns aClassLoaderthat allows for access to the compiled classes.- Throws:
CompileExceptionIOException
-
cook2
- Throws:
CompileExceptionIOException
-
cook
Cooks this compilation unit directly.- Throws:
CompileException
-
getClassFiles
-
setSourceVersion
public void setSourceVersion(int version) Controls the language elements that are accepted by theParser.- Specified by:
setSourceVersionin interfaceICookable- See Also:
-
setTargetVersion
public void setTargetVersion(int version) Controls the .class files that are generated by theUnitCompiler.- Specified by:
setTargetVersionin interfaceICookable- See Also:
-
getBytecodes
- Specified by:
getBytecodesin interfaceICookable- Returns:
- The generated Java bytecode; maps class name to bytes
-
getBytecodes2
-
getClassLoader
Description copied from interface:ISimpleCompilerReturns aClassLoaderobject through which the previously compiled classes can be accessed. ThisClassLoadercan be used for subsequentISimpleCompilers 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:
getClassLoaderin interfaceISimpleCompiler
-
getClassLoader2
-
equals
TwoSimpleCompilers are regarded equal iff- Both are objects of the same class (e.g. both are
ScriptEvaluators) - Both generated functionally equal classes as seen by
Object.equals(Object)
- Both are objects of the same class (e.g. both are
-
hashCode
-
setCompileErrorHandler
Description copied from interface:ISimpleCompilerInstalls anErrorHandlerwhich is invoked during compilation on each error. (By default, the compilation throws aCompileExceptionon the first error and terminates.)If the given
ErrorHandlerthrows aCompileException, then the compilation terminates and the exception is propagated.If the given
ErrorHandlerdoes not throw aCompileExceptionbut 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 aCompileExceptionindicating the number of errors.In other words: The
ErrorHandlermay throw aCompileExceptionor not, but the compilation will definitely throw aCompileExceptionif one or more compile errors have occurred.- Specified by:
setCompileErrorHandlerin interfaceISimpleCompiler- Parameters:
compileErrorHandler-nullto restore the default behavior (throwing aCompileException)
-
setWarningHandler
Description copied from interface:ISimpleCompilerBy default, warnings are discarded, but an application my install a customWarningHandlerwhich 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:
setWarningHandlerin interfaceISimpleCompiler- Parameters:
warningHandler-nullto 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
ClassLoaderinto which the compiled classes were defined - Throws:
CompileException
-
assertUncooked
private void assertUncooked()- Throws:
IllegalStateException- This SimpleCompiler is already cooked
-
assertCooked
- Returns:
- The
ClassFiles that were created when thisSimpleCompilerwasCookable.cook(Reader)ed - Throws:
IllegalStateException- This SimpleCompiler is not yet cooked
-