1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
package bsh;
import bsh.Capabilities.Unavailable;
import java.lang.reflect.InvocationTargetException;
public abstract class ClassGenerator
{
private static ClassGenerator cg;
public static ClassGenerator getClassGenerator()
throws UtilEvalError
{
if ( cg == null )
{
try {
Class clas = Class.forName( "bsh.ClassGeneratorImpl" );
cg = (ClassGenerator)clas.newInstance();
} catch ( Exception e ) {
throw new Unavailable("ClassGenerator unavailable: "+e);
}
}
return cg;
}
/**
Parse the BSHBlock for the class definition and generate the class.
*/
public abstract Class generateClass(
String name, Modifiers modifiers,
Class [] interfaces, Class superClass, BSHBlock block,
boolean isInterface, CallStack callstack, Interpreter interpreter
)
throws EvalError;
/**
Invoke a super.method() style superclass method on an object instance.
This is not a normal function of the Java reflection API and is
provided by generated class accessor methods.
*/
public abstract Object invokeSuperclassMethod(
BshClassManager bcm, Object instance, String methodName, Object [] args
)
throws UtilEvalError, ReflectError, InvocationTargetException;
/**
Change the parent of the class instance namespace.
This is currently used for inner class support.
Note: This method will likely be removed in the future.
*/
public abstract void setInstanceNameSpaceParent(
Object instance, String className, NameSpace parent );
}
|