private void addReadWriteMethods(ClassFile classfile) throws CannotCompileException { List fields = classfile.getFields(); for (Iterator field_iter = fields.iterator(); field_iter.hasNext();) { FieldInfo finfo = (FieldInfo) field_iter.next(); if ((finfo.getAccessFlags() & AccessFlag.STATIC) == 0 && (!finfo.getName().equals(HANDLER_FIELD_NAME))) { // case of non-static field if (filter.handleRead(finfo.getDescriptor(), finfo .getName())) { addReadMethod(classfile, finfo); } if (filter.handleWrite(finfo.getDescriptor(), finfo .getName())) { addWriteMethod(classfile, finfo); } } } }
private int transformInvokevirtualsIntoGetfields(ClassFile classfile, CodeIterator iter, int pos) { ConstPool cp = classfile.getConstPool(); int c = iter.byteAt(pos); if (c != Opcode.GETFIELD) { return pos; } int index = iter.u16bitAt(pos + 1); String fieldName = cp.getFieldrefName(index); String className = cp.getFieldrefClassName(index); if ( !filter.handleReadAccess( className, fieldName ) ) { return pos; } String desc = "()" + cp.getFieldrefType( index ); int read_method_index = cp.addMethodrefInfo( cp.getThisClassInfo(), EACH_READ_METHOD_PREFIX + fieldName, desc ); iter.writeByte(Opcode.INVOKEVIRTUAL, pos); iter.write16bit(read_method_index, pos + 1); return pos; }
private int transformInvokevirtualsIntoPutfields( ClassFile classfile, CodeIterator iter, int pos) { ConstPool cp = classfile.getConstPool(); int c = iter.byteAt(pos); if (c != Opcode.PUTFIELD) { return pos; } int index = iter.u16bitAt(pos + 1); String fieldName = cp.getFieldrefName(index); String className = cp.getFieldrefClassName(index); if ( !filter.handleWriteAccess( className, fieldName ) ) { return pos; } String desc = "(" + cp.getFieldrefType( index ) + ")V"; int write_method_index = cp.addMethodrefInfo( cp.getThisClassInfo(), EACH_WRITE_METHOD_PREFIX + fieldName, desc ); iter.writeByte(Opcode.INVOKEVIRTUAL, pos); iter.write16bit(write_method_index, pos + 1); return pos; }
private int transformInvokevirtualsIntoGetfields(ClassFile classfile, CodeIterator iter, int pos) { ConstPool cp = classfile.getConstPool(); int c = iter.byteAt(pos); if (c != Opcode.GETFIELD) { return pos; } int index = iter.u16bitAt(pos + 1); String fieldName = cp.getFieldrefName(index); String className = cp.getFieldrefClassName(index); if ( !filter.handleReadAccess( className, fieldName ) ) { return pos; } String desc = "()" + cp.getFieldrefType( index ); int read_method_index = cp.addMethodrefInfo( cp.getThisClassInfo(), EACH_READ_METHOD_PREFIX + fieldName, desc ); iter.writeByte(Opcode.INVOKEVIRTUAL, pos); iter.write16bit(read_method_index, pos + 1); return pos; }
private int transformInvokevirtualsIntoPutfields( ClassFile classfile, CodeIterator iter, int pos) { ConstPool cp = classfile.getConstPool(); int c = iter.byteAt(pos); if (c != Opcode.PUTFIELD) { return pos; } int index = iter.u16bitAt(pos + 1); String fieldName = cp.getFieldrefName(index); String className = cp.getFieldrefClassName(index); if ( !filter.handleWriteAccess( className, fieldName ) ) { return pos; } String desc = "(" + cp.getFieldrefType( index ) + ")V"; int write_method_index = cp.addMethodrefInfo( cp.getThisClassInfo(), EACH_WRITE_METHOD_PREFIX + fieldName, desc ); iter.writeByte(Opcode.INVOKEVIRTUAL, pos); iter.write16bit(write_method_index, pos + 1); return pos; }
private void addReadWriteMethods(ClassFile classfile) throws CannotCompileException { List fields = classfile.getFields(); for (Iterator field_iter = fields.iterator(); field_iter.hasNext();) { FieldInfo finfo = (FieldInfo) field_iter.next(); if ((finfo.getAccessFlags() & AccessFlag.STATIC) == 0 && (!finfo.getName().equals(HANDLER_FIELD_NAME))) { // case of non-static field if (filter.handleRead(finfo.getDescriptor(), finfo .getName())) { addReadMethod(classfile, finfo); } if (filter.handleWrite(finfo.getDescriptor(), finfo .getName())) { addWriteMethod(classfile, finfo); } } } }