Web Site

org.codehaus.janino
Class UnitCompiler

java.lang.Object
  extended by org.codehaus.janino.UnitCompiler

public class UnitCompiler
extends java.lang.Object

This class actually implements the JavaTM compiler. It is associated with exactly one compilation unit which it compiles.


Nested Class Summary
static interface UnitCompiler.ErrorHandler
          Interface type for setCompileErrorHandler(org.codehaus.janino.UnitCompiler.ErrorHandler).
static class UnitCompiler.SimpleIField
          Short-hand implementation of IClass.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, java.util.Map localVars)
           
 void compile2(Java.AnonymousClassDeclaration acd)
           
 void compile2(Java.ClassDeclaration cd)
           
 void compile2(org.codehaus.janino.Java.InnerClassDeclaration icd)
           
 void compile2(Java.InterfaceDeclaration id)
           
 void compile2(Java.LocalClassDeclaration lcd)
           
 void compile2(Java.MemberClassDeclaration mcd)
           
 void compile2(Java.PackageMemberTypeDeclaration pmtd)
           
 ClassFile[] compileUnit(EnumeratorSet debuggingInformation)
          Generates an array of ClassFile objects which represent the classes and interfaces defined in the compilation unit.
 IClass findClass(java.lang.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.Block b)
           
 boolean generatesCode2(Java.BlockStatement bs)
           
 boolean generatesCode2(Java.EmptyStatement es)
           
 boolean generatesCode2(Java.FieldDeclaration fd)
           
 boolean generatesCode2(Java.Initializer i)
           
 boolean generatesCode2(Java.LocalClassDeclarationStatement lcds)
           
 boolean generatesCode2ListStatements(java.util.List l)
           
 java.lang.Object getConstantValue(Java.Rvalue rv)
          Attempts to evaluate as a constant expression.
 void getIMethods(IClass type, java.lang.String methodName, java.util.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.FunctionDeclarator.FormalParameter fp)
           
 Java.LocalVariable getLocalVariable(Java.LocalVariableDeclarationStatement lvds, Java.VariableDeclarator vd)
           
 java.lang.String[] getSingleTypeImport(java.lang.String name)
          Check if the given name was imported through a "single type import", e.g.
 CodeContext.Offset getWhereToBreak(Java.BreakableStatement bs)
           
 IClass importTypeOnDemand(java.lang.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) UnitCompiler.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)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

compilationUnit

public final Java.CompilationUnit compilationUnit
Constructor Detail

UnitCompiler

public UnitCompiler(Java.CompilationUnit compilationUnit,
                    IClassLoader iClassLoader)
             throws CompileException
Throws:
CompileException
Method Detail

compileUnit

public ClassFile[] compileUnit(EnumeratorSet debuggingInformation)
                        throws CompileException
Generates an array of ClassFile objects which represent the classes and interfaces defined in the compilation unit.

Throws:
CompileException

compile2

public void compile2(Java.PackageMemberTypeDeclaration pmtd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(Java.ClassDeclaration cd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(Java.AnonymousClassDeclaration acd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(Java.LocalClassDeclaration lcd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(org.codehaus.janino.Java.InnerClassDeclaration icd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(Java.MemberClassDeclaration mcd)
              throws CompileException
Throws:
CompileException

compile2

public void compile2(Java.InterfaceDeclaration id)
              throws CompileException
Throws:
CompileException

getLocalVariable

public Java.LocalVariable getLocalVariable(Java.LocalVariableDeclarationStatement lvds,
                                           Java.VariableDeclarator vd)
                                    throws CompileException
Throws:
CompileException

buildLocalVariableMap

protected void buildLocalVariableMap(Java.CatchClause cc,
                                     java.util.Map localVars)
                              throws CompileException
Throws:
CompileException

getLocalVariable

public Java.LocalVariable getLocalVariable(Java.FunctionDeclarator.FormalParameter fp)
                                    throws CompileException
Throws:
CompileException

getConstantValue

public final java.lang.Object getConstantValue(Java.Rvalue rv)
                                        throws CompileException
Attempts to evaluate as a constant expression.

Expression typeReturn value type
StringString
byteByte
shortChort
intInteger
booleanBoolean
charCharacter
floatFloat
longLong
doubleDouble
nullJava.Rvalue.CONSTANT_VALUE_NULL

Returns:
null iff the rvalue is not a constant value
Throws:
CompileException

generatesCode2

public boolean generatesCode2(Java.BlockStatement bs)

generatesCode2

public boolean generatesCode2(Java.EmptyStatement es)

generatesCode2

public boolean generatesCode2(Java.LocalClassDeclarationStatement lcds)

generatesCode2

public boolean generatesCode2(Java.Initializer i)
                       throws CompileException
Throws:
CompileException

generatesCode2ListStatements

public boolean generatesCode2ListStatements(java.util.List l)
                                     throws CompileException
Throws:
CompileException

generatesCode2

public boolean generatesCode2(Java.Block b)
                       throws CompileException
Throws:
CompileException

generatesCode2

public boolean generatesCode2(Java.FieldDeclaration fd)
                       throws CompileException
Throws:
CompileException

leave2

public void leave2(Java.BlockStatement bs,
                   IClass optionalStackValueType)

leave2

public void leave2(Java.SynchronizedStatement ss,
                   IClass optionalStackValueType)

leave2

public void leave2(Java.TryStatement ts,
                   IClass optionalStackValueType)

toLvalueOrCE

public final Java.Lvalue toLvalueOrCE(Java.Atom a)
                               throws CompileException
Throws:
CompileException

findIMethod

public IClass.IMethod findIMethod(Java.MethodInvocation mi)
                           throws CompileException
Find named methods of "targetType", examine the argument types and choose the most specific method. Check that only the allowed exceptions are thrown.

Notice that the returned IClass.IMethod may be declared in an enclosing type.

Returns:
The selected IClass.IMethod or null
Throws:
CompileException

getIMethods

public void getIMethods(IClass type,
                        java.lang.String methodName,
                        java.util.List v)
                 throws CompileException
Add all methods with the given methodName that are declared by the type, its superclasses and all their superinterfaces to the result list v.

Parameters:
type -
methodName -
v -
Throws:
CompileException

findIMethod

public IClass.IMethod findIMethod(Java.SuperclassMethodInvocation scmi)
                           throws CompileException
Throws:
CompileException

findMostSpecificIInvocable

public IClass.IInvocable findMostSpecificIInvocable(Java.Locatable l,
                                                    IClass.IInvocable[] iInvocables,
                                                    IClass[] argumentTypes,
                                                    boolean boxingPermitted)
                                             throws CompileException
Determine the applicable invocables and choose the most specific invocable.

Returns:
the maximally specific IClass.IInvocable or null if no IClass.IInvocable is applicable
Throws:
CompileException

toIMethod

public IClass.IMethod toIMethod(Java.MethodDeclarator md)

getSingleTypeImport

public java.lang.String[] getSingleTypeImport(java.lang.String name)
Check if the given name was imported through a "single type import", e.g.
     import java.util.Map

Returns:
the fully qualified name or null

importTypeOnDemand

public IClass importTypeOnDemand(java.lang.String simpleTypeName,
                                 Location location)
                          throws CompileException
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.

Returns:
null if the given simpleTypeName cannot be resolved through any of the import-on-demand directives
Throws:
CompileException

findClass

public IClass findClass(java.lang.String className)
Find one class or interface declared in this compilation unit by name.

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

setCompileErrorHandler

public void setCompileErrorHandler(UnitCompiler.ErrorHandler optionalCompileErrorHandler)
By default, CompileExceptions are thrown on compile errors, but an application my install its own (thread-local) UnitCompiler.ErrorHandler.

Be aware that a single problem during compilation often causes a bunch of compile errors, so a good UnitCompiler.ErrorHandler counts errors and throws a CompileException when a limit is reached.

If the given UnitCompiler.ErrorHandler does not throw CompileExceptions, then compileUnit(EnumeratorSet) will throw one when the compilation of the unit is finished, and errors had occurred. In other words: The UnitCompiler.ErrorHandler may throw a CompileException or not, but compileUnit(EnumeratorSet) will definitely throw a CompileException if one or more compile errors have occurred.

Parameters:
optionalCompileErrorHandler - null to restore the default behavior (throwing a CompileException

setWarningHandler

public void setWarningHandler(WarningHandler optionalWarningHandler)
By default, warnings are discarded, but an application my install a custom WarningHandler.

Parameters:
optionalWarningHandler - null to indicate that no warnings be issued

getWhereToBreak

public CodeContext.Offset getWhereToBreak(Java.BreakableStatement bs)

Web Site