Web Site

org.codehaus.janino
Class ClassBodyEvaluator

java.lang.Object
  extended byorg.codehaus.janino.EvaluatorBase
      extended byorg.codehaus.janino.ClassBodyEvaluator

public class ClassBodyEvaluator
extends EvaluatorBase

Parses a class body and returns it as a java.lang.Class object ready for use with java.lang.reflect.

Example:

   import java.util.*;

   static private int a = 1;
   private int b = 2;

   public void func(int c, int d) {
       return func2(c, d);
   }

   private static void func2(int e, int f) {
       return e * f;
   }
 


Constructor Summary
ClassBodyEvaluator(Scanner scanner, Class optionalExtendedType, Class[] implementedTypes, ClassLoader optionalParentClassLoader)
          See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).
ClassBodyEvaluator(Scanner scanner, ClassLoader optionalParentClassLoader)
          See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).
ClassBodyEvaluator(Scanner scanner, String className, Class optionalExtendedType, Class[] implementedTypes, ClassLoader optionalParentClassLoader)
          Parse and compile a class body, i.e.
ClassBodyEvaluator(String classBody)
          See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).
ClassBodyEvaluator(String optionalFileName, InputStream is)
          See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).
ClassBodyEvaluator(String optionalFileName, Reader reader)
          See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).
 
Method Summary
static Object createFastClassBodyEvaluator(Scanner scanner, Class optionalBaseType, ClassLoader optionalClassLoader)
          Compiles a class body and instantiates it.
static Object createFastClassBodyEvaluator(Scanner scanner, String className, Class optionalExtendedType, Class[] implementedTypes, ClassLoader optionalParentClassLoader)
          Like createFastClassBodyEvaluator(Scanner, Class, ClassLoader), but gives you more control over the generated class (rarely needed in practice).
 Class evaluate()
          Returns the java.lang.Class object compiled from the class body.
 
Methods inherited from class org.codehaus.janino.EvaluatorBase
addClassMethodBlockDeclaration, addPackageMemberClassDeclaration, classesToTypes, classToType, compileAndLoad, compileAndLoad, makeFormalParameters, parseImportDeclarations
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClassBodyEvaluator

public ClassBodyEvaluator(String classBody)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException
See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).


ClassBodyEvaluator

public ClassBodyEvaluator(String optionalFileName,
                          InputStream is)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException,
                          IOException
See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).


ClassBodyEvaluator

public ClassBodyEvaluator(String optionalFileName,
                          Reader reader)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException,
                          IOException
See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).


ClassBodyEvaluator

public ClassBodyEvaluator(Scanner scanner,
                          ClassLoader optionalParentClassLoader)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException,
                          IOException
See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).


ClassBodyEvaluator

public ClassBodyEvaluator(Scanner scanner,
                          Class optionalExtendedType,
                          Class[] implementedTypes,
                          ClassLoader optionalParentClassLoader)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException,
                          IOException
See ClassBodyEvaluator(Scanner, String, Class, Class[], ClassLoader).


ClassBodyEvaluator

public ClassBodyEvaluator(Scanner scanner,
                          String className,
                          Class optionalExtendedType,
                          Class[] implementedTypes,
                          ClassLoader optionalParentClassLoader)
                   throws CompileException,
                          Parser.ParseException,
                          Scanner.ScanException,
                          IOException
Parse and compile a class body, i.e. a series of member definitions.

The optionalClassLoader serves two purposes:

A number of constructors exist that provide useful default values for the various parameters, or parse the class body from a String, an InputStream or a Reader instead of a Scanner.

Parameters:
scanner - Source of tokens
className - The name of the temporary class (uncritical)
optionalExtendedType - Class to extend or null
implementedTypes - Interfaces to implement
optionalParentClassLoader - Loads referenced classes
Method Detail

createFastClassBodyEvaluator

public static Object createFastClassBodyEvaluator(Scanner scanner,
                                                  Class optionalBaseType,
                                                  ClassLoader optionalClassLoader)
                                           throws CompileException,
                                                  Parser.ParseException,
                                                  Scanner.ScanException,
                                                  IOException
Compiles a class body and instantiates it. The generated class may optionally extend/implement a given type. The returned instance can safely be type-casted to that optionalBaseType.

Example:

 public interface Foo {
     int bar(int a, int b);
 }
 ...
 Foo f = (Foo) ClassBodyEvaluator.createFastClassBodyEvaluator(
     new Scanner(null, new StringReader("public int bar(int a, int b) { return a + b; }")),
     Foo.class,
     (ClassLoader) null          // Use current thread's context class loader
 );
 System.out.println("1 + 2 = " + f.bar(1, 2));
 
Notice: The optionalBaseType must either be declared public, or with package scope in the root package (i.e. "no" package).

Parameters:
scanner - Source of class body tokens
optionalBaseType - Base type to extend/implement (see above)
optionalClassLoader -
Returns:
an object that extends/implements the given optionalBaseType
Throws:
CompileException
Parser.ParseException
Scanner.ScanException
IOException

createFastClassBodyEvaluator

public static Object createFastClassBodyEvaluator(Scanner scanner,
                                                  String className,
                                                  Class optionalExtendedType,
                                                  Class[] implementedTypes,
                                                  ClassLoader optionalParentClassLoader)
                                           throws CompileException,
                                                  Parser.ParseException,
                                                  Scanner.ScanException,
                                                  IOException
Like createFastClassBodyEvaluator(Scanner, Class, ClassLoader), but gives you more control over the generated class (rarely needed in practice).

Notice: The optionalExtendedType and the implementedTypes must either be declared public, or with package scope in the same package as className.

Parameters:
scanner - Source of class body tokens
className - Name of generated class
optionalExtendedType - Class to extend
implementedTypes - Interfaces to implement
optionalParentClassLoader - Loads referenced classes
Returns:
an object that extends the optionalExtendedType and implements the given implementedTypes
Throws:
CompileException
Parser.ParseException
Scanner.ScanException
IOException

evaluate

public Class evaluate()
Returns the java.lang.Class object compiled from the class body.


Web Site