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 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; }