public class ProxyMaker extends ProxyCodeHelpers implements ClassConstants, org.objectweb.asm.Opcodes
ProxyCodeHelpers.AnnotationDescr, ProxyCodeHelpers.ConstructorDescr, ProxyCodeHelpers.MethodDescr
Modifier and Type | Field and Description |
---|---|
ClassFile |
classfile |
protected java.lang.Class<?>[] |
interfaces |
java.lang.String |
myClass
The name of the class to build.
|
protected java.lang.Class<?> |
superclass |
tBoolean, tByte, tCharacter, tDouble, tFloat, tInteger, tLong, tNone, tOther, tShort, tVoid, types
$clss, $obj, $objArr, $pyCode, $pyComplex, $pyExc, $pyFloat, $pyFrame, $pyFuncTbl, $pyInteger, $pyLong, $pyObj, $pyObjArr, $pyProxy, $pyRunnable, $pyStr, $pyUnicode, $str, $strArr, $threadState, $throwable
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V9
Constructor and Description |
---|
ProxyMaker(java.lang.String superclassName,
java.lang.Class<?> superclass)
Deprecated.
|
ProxyMaker(java.lang.String proxyClassName,
java.lang.Class<?> superclass,
java.lang.Class<?>... interfaces)
Creates a proxy class maker that produces classes named
proxyClassName that
extends superclass and implements the interfaces in interfaces . |
Modifier and Type | Method and Description |
---|---|
protected void |
addClassAnnotation(ProxyCodeHelpers.AnnotationDescr annotation) |
void |
addClassDictInit() |
protected void |
addConstructor(java.lang.Class<?>[] parameters,
int access)
Adds a constructor that calls through to superclass.
|
void |
addConstructor(java.lang.String name,
java.lang.Class<?>[] parameters,
java.lang.Class<?> ret,
java.lang.String sig,
int access) |
void |
addConstructorMethodCode(java.lang.String pyName,
java.lang.Class<?>[] parameters,
java.lang.Class<?>[] exceptions,
int access,
java.lang.Class<?> declaringClass,
Code code)
A constructor that is also a method (!)
|
void |
addConstructors(java.lang.Class<?> c) |
void |
addMethod(java.lang.reflect.Method method,
int access) |
void |
addMethod(java.lang.String name,
java.lang.Class<?> ret,
java.lang.Class<?>[] parameters,
java.lang.Class<?>[] exceptions,
int access,
java.lang.Class<?> declaringClass)
Adds a method of the given name to the class being implemented.
|
void |
addMethod(java.lang.String name,
java.lang.String pyName,
java.lang.Class<?> ret,
java.lang.Class<?>[] parameters,
java.lang.Class<?>[] exceptions,
int access,
java.lang.Class<?> declaringClass,
ProxyCodeHelpers.AnnotationDescr[] methodAnnotations,
ProxyCodeHelpers.AnnotationDescr[][] parameterAnnotations)
Generates and adds a proxy method to the proxy class
|
protected void |
addMethods(java.lang.Class<?> c,
java.util.Set<java.lang.String> t) |
protected Code |
addOpenConstructor(java.lang.reflect.Constructor<?> constructor)
Adds a constructor that calls through to the superclass constructor with the same signature
and leaves the returned Code open for more operations.
|
void |
addProxy() |
void |
addSuperMethod(java.lang.reflect.Method method,
int access) |
void |
addSuperMethod(java.lang.String methodName,
java.lang.String superName,
java.lang.String declClass,
java.lang.Class<?>[] parameters,
java.lang.Class<?> ret,
java.lang.String sig,
int access) |
void |
build() |
void |
build(java.io.OutputStream out)
Builds this proxy and writes its bytecode to
out . |
protected void |
callInitProxy(java.lang.Class<?>[] parameters,
Code code)
Calls __initProxy__ on this class with the given types of parameters, which must be
available as arguments to the currently called method in the order of the parameters.
|
void |
callMethod(Code code,
java.lang.String name,
java.lang.Class<?>[] parameters,
java.lang.Class<?> ret,
java.lang.Class<?>[] exceptions) |
void |
callSuper(Code code,
java.lang.String name,
java.lang.String superclass,
java.lang.Class<?>[] parameters,
java.lang.Class<?> ret,
boolean doReturn) |
void |
doConstants() |
void |
doJavaCall(Code code,
java.lang.String name,
java.lang.String type,
java.lang.String jcallName) |
void |
getArgs(Code code,
java.lang.Class<?>[] parameters) |
protected void |
visitClassAnnotations() |
protected void |
visitConstructor(java.lang.reflect.Constructor<?> constructor)
Called for every constructor on the proxy's superclass that can be overridden by
the proxy class.
|
protected void |
visitConstructors()
Visits constructors from this proxy's superclass.
|
protected void |
visitMethod(java.lang.reflect.Method method)
Called for every method on the proxy's superclass and interfaces that can be overridden by
the proxy class.
|
protected void |
visitMethods() |
protected void |
visitMethods(java.lang.Class<?> klass)
Visits all methods declared on the given class and classes in its inheritance hierarchy.
|
doNullReturn, doReturn, fillTypes, findPython, getType, makeSig, makeSig, mapClass, mapClasses, mapExceptions, mapType, notImplementedAbstractMethod
protected final java.lang.Class<?> superclass
protected final java.lang.Class<?>[] interfaces
public ClassFile classfile
public java.lang.String myClass
@Deprecated public ProxyMaker(java.lang.String superclassName, java.lang.Class<?> superclass)
ProxyMaker(String, Class, Class[])
org.python.proxies.(superclassName)
with superclass
as an
implemented interface or extended class, depending on the its type.public ProxyMaker(java.lang.String proxyClassName, java.lang.Class<?> superclass, java.lang.Class<?>... interfaces)
proxyClassName
that
extends superclass
and implements the interfaces in interfaces
.public void doConstants() throws java.lang.Exception
java.lang.Exception
public void callSuper(Code code, java.lang.String name, java.lang.String superclass, java.lang.Class<?>[] parameters, java.lang.Class<?> ret, boolean doReturn) throws java.lang.Exception
java.lang.Exception
public void doJavaCall(Code code, java.lang.String name, java.lang.String type, java.lang.String jcallName) throws java.lang.Exception
java.lang.Exception
public void getArgs(Code code, java.lang.Class<?>[] parameters) throws java.lang.Exception
java.lang.Exception
public void callMethod(Code code, java.lang.String name, java.lang.Class<?>[] parameters, java.lang.Class<?> ret, java.lang.Class<?>[] exceptions) throws java.lang.Exception
java.lang.Exception
public void addMethod(java.lang.reflect.Method method, int access) throws java.lang.Exception
java.lang.Exception
public void addMethod(java.lang.String name, java.lang.Class<?> ret, java.lang.Class<?>[] parameters, java.lang.Class<?>[] exceptions, int access, java.lang.Class<?> declaringClass) throws java.lang.Exception
declaringClass
is null, the generated method will expect to find an object of
the method's name in the Python object and call it. If it isn't null, if an object is found
in the Python object, it'll be called. Otherwise the superclass will be called. No checking
is done to guarantee that the superclass has a method with the same signature.java.lang.Exception
public void addMethod(java.lang.String name, java.lang.String pyName, java.lang.Class<?> ret, java.lang.Class<?>[] parameters, java.lang.Class<?>[] exceptions, int access, java.lang.Class<?> declaringClass, ProxyCodeHelpers.AnnotationDescr[] methodAnnotations, ProxyCodeHelpers.AnnotationDescr[][] parameterAnnotations) throws java.lang.Exception
name
- of the java methodpyName
- name of the python method to which the java method proxies (useful for clamped
objects)ret
- return typeparameters
- parameter typesexceptions
- throwable exception typesaccess
- declaringClass
- methodAnnotations
- method annotationsparameterAnnotations
- parameter annotationsjava.lang.Exception
public void addConstructorMethodCode(java.lang.String pyName, java.lang.Class<?>[] parameters, java.lang.Class<?>[] exceptions, int access, java.lang.Class<?> declaringClass, Code code) throws java.lang.Exception
java.lang.Exception
protected void addMethods(java.lang.Class<?> c, java.util.Set<java.lang.String> t) throws java.lang.Exception
java.lang.Exception
public void addConstructor(java.lang.String name, java.lang.Class<?>[] parameters, java.lang.Class<?> ret, java.lang.String sig, int access) throws java.lang.Exception
java.lang.Exception
public void addConstructors(java.lang.Class<?> c) throws java.lang.Exception
java.lang.Exception
protected void addClassAnnotation(ProxyCodeHelpers.AnnotationDescr annotation)
public void addSuperMethod(java.lang.reflect.Method method, int access) throws java.lang.Exception
java.lang.Exception
public void addSuperMethod(java.lang.String methodName, java.lang.String superName, java.lang.String declClass, java.lang.Class<?>[] parameters, java.lang.Class<?> ret, java.lang.String sig, int access) throws java.lang.Exception
java.lang.Exception
public void addProxy() throws java.lang.Exception
java.lang.Exception
public void addClassDictInit() throws java.lang.Exception
java.lang.Exception
public void build(java.io.OutputStream out) throws java.lang.Exception
out
.java.lang.Exception
public void build() throws java.lang.Exception
java.lang.Exception
protected void visitMethods(java.lang.Class<?> klass) throws java.lang.Exception
seen
.java.lang.Exception
protected void visitMethod(java.lang.reflect.Method method) throws java.lang.Exception
addMethod(Method, int)
or one of its more complex forms should be called. For
abstract methods, addMethod
must be called.java.lang.Exception
protected void visitMethods() throws java.lang.Exception
java.lang.Exception
protected void addConstructor(java.lang.Class<?>[] parameters, int access) throws java.lang.Exception
java.lang.Exception
protected void visitConstructor(java.lang.reflect.Constructor<?> constructor) throws java.lang.Exception
java.lang.Exception
protected Code addOpenConstructor(java.lang.reflect.Constructor<?> constructor) throws java.lang.Exception
java.lang.Exception
protected void callInitProxy(java.lang.Class<?>[] parameters, Code code) throws java.lang.Exception
java.lang.Exception
protected void visitConstructors() throws java.lang.Exception
java.lang.Exception
protected void visitClassAnnotations() throws java.lang.Exception
java.lang.Exception