janino.net

org.codehaus.janino
Class UnitCompiler

  extended by org.codehaus.janino.UnitCompiler

public class UnitCompiler
extends

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


Nested Class Summary
static class UnitCompiler.SimpleIField
          Short-hand implementation of IClass.IField that implements a non-constant, non-static, package-accessible field.
 
Field Summary
static boolean JUMP_IF_FALSE
          Special value for the orientation parameter of the compileBoolean(Java.Rvalue, CodeContext.Offset, boolean) methods, indicating that the code should be generated such that execution branches if the value on top of the operand stack is FALSE.
static boolean JUMP_IF_TRUE
          Special value for the orientation parameter of the compileBoolean(Java.Rvalue, CodeContext.Offset, boolean) methods, indicating that the code should be generated such that execution branches if the value on top of the operand stack is TRUE.
static  NOT_CONSTANT
          Special return value for the getConstantValue(Java.Rvalue) method family indicating that the given Java.Rvalue does not evaluate to a constant value.
 
Constructor Summary
UnitCompiler(Java.CompilationUnit compilationUnit, IClassLoader iClassLoader)
           
 
Method Summary
protected  void buildLocalVariableMap(Java.CatchClause catchClause, <,Java.LocalVariable> localVars)
          Adds the given localVars to the 'local variable map' of the given catchClause.
 ClassFile[] compileUnit(boolean debugSource, boolean debugLines, boolean debugVars)
          Generates an array of ClassFile objects which represent the classes and interfaces declared in the compilation unit.
 IClass findClass( 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 superclassMethodInvocation)
           
 IClass.IInvocable findMostSpecificIInvocable(Java.Locatable locatable, IClass.IInvocable[] iInvocables, IClass[] argumentTypes, boolean boxingPermitted, Java.Scope contextScope)
          Determine the applicable invocables and choose the most specific invocable.
 Java.CompilationUnit getCompilationUnit()
           
  getConstantValue(Java.Rvalue rv)
          Attempts to evaluate as a constant expression.
 void getIMethods(IClass type,  methodName, <IClass.IMethod> 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 parameter)
           
 Java.LocalVariable getLocalVariable(Java.FunctionDeclarator.FormalParameter parameter, boolean isVariableArityParameter)
           
 Java.LocalVariable getLocalVariable(Java.LocalVariableDeclarationStatement lvds, Java.VariableDeclarator vd)
           
 [] getSingleTypeImport( name, Location location)
          Check if the given simple name was imported through a single type import.
 IClass importTypeOnDemand( simpleTypeName, Location location)
          6.5.2.BL1.B1.B5, 6.5.2.BL1.B1.B6 Type-import-on-demand.
 void setCompileErrorHandler(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 methodDeclarator)
           
 
Methods inherited from class java.lang.
, , , , , , , , , ,
 

Field Detail

JUMP_IF_TRUE

public static final boolean JUMP_IF_TRUE
Special value for the orientation parameter of the compileBoolean(Java.Rvalue, CodeContext.Offset, boolean) methods, indicating that the code should be generated such that execution branches if the value on top of the operand stack is TRUE.

See Also:
Constant Field Values

JUMP_IF_FALSE

public static final boolean JUMP_IF_FALSE
Special value for the orientation parameter of the compileBoolean(Java.Rvalue, CodeContext.Offset, boolean) methods, indicating that the code should be generated such that execution branches if the value on top of the operand stack is FALSE.

See Also:
Constant Field Values

NOT_CONSTANT

public static final  NOT_CONSTANT
Special return value for the getConstantValue(Java.Rvalue) method family indicating that the given Java.Rvalue does not evaluate to a constant value.

Constructor Detail

UnitCompiler

public UnitCompiler(Java.CompilationUnit compilationUnit,
                    IClassLoader iClassLoader)
Method Detail

getCompilationUnit

public Java.CompilationUnit getCompilationUnit()
Returns:
The Java.CompilationUnit that this UnitCompiler compiles

compileUnit

public ClassFile[] compileUnit(boolean debugSource,
                               boolean debugLines,
                               boolean debugVars)
                        throws CompileException
Generates an array of ClassFile objects which represent the classes and interfaces declared in the compilation unit.

Throws:
CompileException

getLocalVariable

public Java.LocalVariable getLocalVariable(Java.LocalVariableDeclarationStatement lvds,
                                           Java.VariableDeclarator vd)
                                    throws CompileException
Returns:
The Java.LocalVariable corresponding with the local variable declaration/declarator
Throws:
CompileException

buildLocalVariableMap

protected void buildLocalVariableMap(Java.CatchClause catchClause,
                                     <,Java.LocalVariable> localVars)
                              throws CompileException
Adds the given localVars to the 'local variable map' of the given catchClause.

Throws:
CompileException

getLocalVariable

public Java.LocalVariable getLocalVariable(Java.FunctionDeclarator.FormalParameter parameter)
                                    throws CompileException
Returns:
The Java.LocalVariable corresponding with the parameter
Throws:
CompileException

getLocalVariable

public Java.LocalVariable getLocalVariable(Java.FunctionDeclarator.FormalParameter parameter,
                                           boolean isVariableArityParameter)
                                    throws CompileException
Parameters:
isVariableArityParameter - Whether the parameter is the last parameter of a 'variable arity' (a.k.a. 'varargs') method declaration
Returns:
The Java.LocalVariable corresponding with the parameter
Throws:
CompileException

getConstantValue

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

Returns:
NOT_CONSTANT iff the rvalue is not a constant value
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,
                         methodName,
                        <IClass.IMethod> 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.

Throws:
CompileException

findIMethod

public IClass.IMethod findIMethod(Java.SuperclassMethodInvocation superclassMethodInvocation)
                           throws CompileException
Returns:
The IClass.IMethod that implements the superclassMethodInvocation
Throws:
CompileException

findMostSpecificIInvocable

public IClass.IInvocable findMostSpecificIInvocable(Java.Locatable locatable,
                                                    IClass.IInvocable[] iInvocables,
                                                    IClass[] argumentTypes,
                                                    boolean boxingPermitted,
                                                    Java.Scope contextScope)
                                             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 methodDeclarator)
Returns:
The IClass.IMethod that implements the methodDeclarator

getSingleTypeImport

public [] getSingleTypeImport( name,
                                    Location location)
                             throws CompileException
Check if the given simple name was imported through a single type import.

Parameters:
name - The simple type name, e.g. Inner
Returns:
The fully qualified name, e.g. { "pkg", "Outer", "Inner" }, or null
Throws:
CompileException

importTypeOnDemand

public IClass importTypeOnDemand( 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( 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 or an interface with that name is not declared in this compilation unit

setCompileErrorHandler

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

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(boolean, boolean, boolean) 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(boolean, boolean, boolean) 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

janino.net

Copyright @2023 . janino. All Rights Reserved .