org.codehaus.janino
public class UnitCompiler extends Object
Nested Class Summary | |
---|---|
interface | UnitCompiler.ErrorHandler
Interface type for UnitCompiler. |
static class | UnitCompiler.SimpleIField
Short-hand implementation of IField that implements a
non-constant, non-static, package-accessible field. |
Field Summary | |
---|---|
Java.CompilationUnit | compilationUnit |
Constructor Summary | |
---|---|
UnitCompiler(Java.CompilationUnit compilationUnit, IClassLoader iClassLoader) |
Method Summary | |
---|---|
protected void | buildLocalVariableMap(Java.CatchClause cc, Map localVars) |
void | compile2(Java.PackageMemberTypeDeclaration pmtd) |
void | compile2(Java.ClassDeclaration cd) |
void | compile2(Java.AnonymousClassDeclaration acd) |
void | compile2(Java.LocalClassDeclaration lcd) |
void | compile2(Java.InnerClassDeclaration icd) |
void | compile2(Java.MemberClassDeclaration mcd) |
void | compile2(Java.InterfaceDeclaration id) |
ClassFile[] | compileUnit(EnumeratorSet debuggingInformation)
Generates an array of ClassFile objects which represent the classes and
interfaces defined in the compilation unit. |
IClass | findClass(String className)
Find one class or interface declared in this compilation unit by name.
|
IClass.IMethod | findIMethod(Java.MethodInvocation mi)
Find named methods of "targetType", examine the argument types and choose the
most specific method. |
IClass.IMethod | findIMethod(Java.SuperclassMethodInvocation scmi) |
IClass.IInvocable | findMostSpecificIInvocable(Java.Locatable l, IClass.IInvocable[] iInvocables, IClass[] argumentTypes, boolean boxingPermitted)
Determine the applicable invocables and choose the most specific invocable.
|
boolean | generatesCode2(Java.BlockStatement bs) |
boolean | generatesCode2(Java.EmptyStatement es) |
boolean | generatesCode2(Java.LocalClassDeclarationStatement lcds) |
boolean | generatesCode2(Java.Initializer i) |
boolean | generatesCode2(Java.Block b) |
boolean | generatesCode2(Java.FieldDeclaration fd) |
boolean | generatesCode2ListStatements(List l) |
Object | getConstantValue(Java.Rvalue rv)
Attempts to evaluate as a constant expression.
|
void | getIMethods(IClass type, String methodName, List v)
Add all methods with the given methodName that are declared
by the type , its superclasses and all their superinterfaces
to the result list v . |
Java.LocalVariable | getLocalVariable(Java.LocalVariableDeclarationStatement lvds, Java.VariableDeclarator vd) |
Java.LocalVariable | getLocalVariable(Java.FunctionDeclarator.FormalParameter fp) |
String[] | getSingleTypeImport(String name)
Check if the given name was imported through a "single type import", e.g. import java.util.Map |
CodeContext.Offset | getWhereToBreak(Java.BreakableStatement bs) |
IClass | importTypeOnDemand(String simpleTypeName, Location location)
6.5.2.BL1.B1.B5, 6.5.2.BL1.B1.B6 Type-import-on-demand. 6.5.5.1.6 Type-import-on-demand declaration. |
void | leave2(Java.BlockStatement bs, IClass optionalStackValueType) |
void | leave2(Java.SynchronizedStatement ss, IClass optionalStackValueType) |
void | leave2(Java.TryStatement ts, IClass optionalStackValueType) |
void | setCompileErrorHandler(UnitCompiler.ErrorHandler optionalCompileErrorHandler)
By default, CompileExceptions are thrown on compile errors, but an application
my install its own (thread-local) ErrorHandler.
|
void | setWarningHandler(WarningHandler optionalWarningHandler)
By default, warnings are discarded, but an application my install a custom
WarningHandler.
|
IClass.IMethod | toIMethod(Java.MethodDeclarator md) |
Java.Lvalue | toLvalueOrCE(Java.Atom a) |
Parameters: className Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner".
Returns: null
if a class with that name is not declared in this compilation unit
Notice that the returned IMethod may be declared in an enclosing type.
Returns: The selected IMethod or null
Returns: the maximally specific IInvocable or null
if no IInvocable is applicable
Throws: CompileException
Expression type | Return value type |
---|---|
String | String |
byte | Byte |
short | Chort |
int | Integer |
boolean | Boolean |
char | Character |
float | Float |
long | Long |
double | Double |
null | CONSTANT_VALUE_NULL |
Returns: null
iff the rvalue is not a constant value
methodName
that are declared
by the type
, its superclasses and all their superinterfaces
to the result list v
.Parameters: type methodName v
Throws: CompileException
import java.util.Map
Returns: the fully qualified name or null
Returns: null
if the given simpleTypeName
cannot be resolved through any of the import-on-demand directives
Be aware that a single problem during compilation often causes a bunch of compile errors, so a good ErrorHandler counts errors and throws a CompileException when a limit is reached.
If the given ErrorHandler does not throw CompileExceptions, then compileUnit will throw one when the compilation of the unit is finished, and errors had occurred. In other words: The ErrorHandler may throw a CompileException or not, but compileUnit will definitely throw a CompileException if one or more compile errors have occurred.
Parameters: optionalCompileErrorHandler null
to restore the default behavior (throwing a CompileException
Parameters: optionalWarningHandler null
to indicate that no warnings be issued