Java Code Examples for javassist.bytecode.ConstPool#addFieldrefInfo()
The following examples show how to use
javassist.bytecode.ConstPool#addFieldrefInfo() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FieldTransformer.java From cacheonix-core with GNU Lesser General Public License v2.1 | 6 votes |
private void addGetFieldHandlerMethod(ClassFile classfile) throws CannotCompileException { ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR); /* local variable | this | */ Bytecode code = new Bytecode(cp, 2, 1); // aload_0 // load this code.addAload(0); // getfield // get field "$JAVASSIST_CALLBACK" defined already code.addOpcode(Opcode.GETFIELD); int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR); code.addIndex(field_index); // areturn // return the value of the field code.addOpcode(Opcode.ARETURN); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo); }
Example 2
Source File: FieldTransformer.java From cacheonix-core with GNU Lesser General Public License v2.1 | 6 votes |
private void addSetFieldHandlerMethod(ClassFile classfile) throws CannotCompileException { ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME, SETFIELDHANDLER_METHOD_DESCRIPTOR); /* local variables | this | callback | */ Bytecode code = new Bytecode(cp, 3, 3); // aload_0 // load this code.addAload(0); // aload_1 // load callback code.addAload(1); // putfield // put field "$JAVASSIST_CALLBACK" defined already code.addOpcode(Opcode.PUTFIELD); int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR); code.addIndex(field_index); // return code.addOpcode(Opcode.RETURN); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo); }
Example 3
Source File: FieldTransformer.java From cacheonix-core with GNU Lesser General Public License v2.1 | 4 votes |
private void addReadMethod(ClassFile classfile, FieldInfo finfo) throws CannotCompileException { ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); String desc = "()" + finfo.getDescriptor(); MethodInfo minfo = new MethodInfo(cp, EACH_READ_METHOD_PREFIX + finfo.getName(), desc); /* local variables | target obj | each oldvalue | */ Bytecode code = new Bytecode(cp, 5, 3); // aload_0 code.addAload(0); // getfield // get each field code.addOpcode(Opcode.GETFIELD); int base_field_index = cp.addFieldrefInfo(this_class_index, finfo .getName(), finfo.getDescriptor()); code.addIndex(base_field_index); // aload_0 code.addAload(0); // invokeinterface // invoke Enabled.getInterceptFieldCallback() int enabled_class_index = cp.addClassInfo(FIELD_HANDLED_TYPE_NAME); code.addInvokeinterface(enabled_class_index, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR, 1); // ifnonnull code.addOpcode(Opcode.IFNONNULL); code.addIndex(4); // *return // each type addTypeDependDataReturn(code, finfo.getDescriptor()); // *store_1 // each type addTypeDependDataStore(code, finfo.getDescriptor(), 1); // aload_0 code.addAload(0); // invokeinterface // invoke Enabled.getInterceptFieldCallback() code.addInvokeinterface(enabled_class_index, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR, 1); // aload_0 code.addAload(0); // ldc // name of the field code.addLdc(finfo.getName()); // *load_1 // each type addTypeDependDataLoad(code, finfo.getDescriptor(), 1); // invokeinterface // invoke Callback.read*() // each type addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), true); // *return // each type addTypeDependDataReturn(code, finfo.getDescriptor()); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo); }
Example 4
Source File: FieldTransformer.java From cacheonix-core with GNU Lesser General Public License v2.1 | 4 votes |
private void addWriteMethod(ClassFile classfile, FieldInfo finfo) throws CannotCompileException { ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); String desc = "(" + finfo.getDescriptor() + ")V"; MethodInfo minfo = new MethodInfo(cp, EACH_WRITE_METHOD_PREFIX + finfo.getName(), desc); /* local variables | target obj | each oldvalue | */ Bytecode code = new Bytecode(cp, 6, 3); // aload_0 code.addAload(0); // invokeinterface // enabled.getInterceptFieldCallback() int enabled_class_index = cp.addClassInfo(FIELD_HANDLED_TYPE_NAME); code.addInvokeinterface(enabled_class_index, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR, 1); // ifnonnull (label1) code.addOpcode(Opcode.IFNONNULL); code.addIndex(9); // aload_0 code.addAload(0); // *load_1 addTypeDependDataLoad(code, finfo.getDescriptor(), 1); // putfield code.addOpcode(Opcode.PUTFIELD); int base_field_index = cp.addFieldrefInfo(this_class_index, finfo .getName(), finfo.getDescriptor()); code.addIndex(base_field_index); code.growStack(-Descriptor.dataSize(finfo.getDescriptor())); // return ; code.addOpcode(Opcode.RETURN); // aload_0 code.addAload(0); // dup code.addOpcode(Opcode.DUP); // invokeinterface // enabled.getInterceptFieldCallback() code.addInvokeinterface(enabled_class_index, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR, 1); // aload_0 code.addAload(0); // ldc // field name code.addLdc(finfo.getName()); // aload_0 code.addAload(0); // getfield // old value of the field code.addOpcode(Opcode.GETFIELD); code.addIndex(base_field_index); code.growStack(Descriptor.dataSize(finfo.getDescriptor()) - 1); // *load_1 addTypeDependDataLoad(code, finfo.getDescriptor(), 1); // invokeinterface // callback.write*(..) addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), false); // putfield // new value of the field code.addOpcode(Opcode.PUTFIELD); code.addIndex(base_field_index); code.growStack(-Descriptor.dataSize(finfo.getDescriptor())); // return code.addOpcode(Opcode.RETURN); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo); }