protected FieldTransformer getFieldTransformer(final ClassFile classfile) { if ( alreadyInstrumented( classfile ) ) { return null; } return new FieldTransformer( new FieldFilter() { public boolean handleRead(String desc, String name) { return fieldFilter.shouldInstrumentField( classfile.getName(), name ); } public boolean handleWrite(String desc, String name) { return fieldFilter.shouldInstrumentField( classfile.getName(), name ); } public boolean handleReadAccess(String fieldOwnerClassName, String fieldName) { return fieldFilter.shouldTransformFieldAccess( classfile.getName(), fieldOwnerClassName, fieldName ); } public boolean handleWriteAccess(String fieldOwnerClassName, String fieldName) { return fieldFilter.shouldTransformFieldAccess( classfile.getName(), fieldOwnerClassName, fieldName ); } } ); }
public void transform(ClassFile classfile) throws Exception { if (classfile.isInterface()) { return; } try { addFieldHandlerField(classfile); addGetFieldHandlerMethod(classfile); addSetFieldHandlerMethod(classfile); addFieldHandledInterface(classfile); addReadWriteMethods(classfile); transformInvokevirtualsIntoPutAndGetfields(classfile); } catch (CannotCompileException e) { throw new RuntimeException(e.getMessage(), e); } }
code.addIndex(4); addTypeDependDataReturn(code, finfo.getDescriptor()); addTypeDependDataStore(code, finfo.getDescriptor(), 1); addTypeDependDataLoad(code, finfo.getDescriptor(), 1); addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), true); addTypeDependDataReturn(code, finfo.getDescriptor());
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); } } } }
addTypeDependDataLoad(code, finfo.getDescriptor(), 1); code.growStack(Descriptor.dataSize(finfo.getDescriptor()) - 1); addTypeDependDataLoad(code, finfo.getDescriptor(), 1); addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), false);
code.addIndex(4); addTypeDependDataReturn(code, finfo.getDescriptor()); addTypeDependDataStore(code, finfo.getDescriptor(), 1); addTypeDependDataLoad(code, finfo.getDescriptor(), 1); addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), true); addTypeDependDataReturn(code, finfo.getDescriptor());
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); } } } }
addTypeDependDataLoad(code, finfo.getDescriptor(), 1); code.growStack(Descriptor.dataSize(finfo.getDescriptor()) - 1); addTypeDependDataLoad(code, finfo.getDescriptor(), 1); addInvokeFieldHandlerMethod(classfile, code, finfo.getDescriptor(), false);
public void transform(ClassFile classfile) throws Exception { if (classfile.isInterface()) { return; } try { addFieldHandlerField(classfile); addGetFieldHandlerMethod(classfile); addSetFieldHandlerMethod(classfile); addFieldHandledInterface(classfile); addReadWriteMethods(classfile); transformInvokevirtualsIntoPutAndGetfields(classfile); } catch (CannotCompileException e) { throw new RuntimeException(e.getMessage(), e); } }
protected FieldTransformer getFieldTransformer(final ClassFile classfile) { if ( alreadyInstrumented( classfile ) ) { return null; } return new FieldTransformer( new FieldFilter() { public boolean handleRead(String desc, String name) { return fieldFilter.shouldInstrumentField( classfile.getName(), name ); } public boolean handleWrite(String desc, String name) { return fieldFilter.shouldInstrumentField( classfile.getName(), name ); } public boolean handleReadAccess(String fieldOwnerClassName, String fieldName) { return fieldFilter.shouldTransformFieldAccess( classfile.getName(), fieldOwnerClassName, fieldName ); } public boolean handleWriteAccess(String fieldOwnerClassName, String fieldName) { return fieldFilter.shouldTransformFieldAccess( classfile.getName(), fieldOwnerClassName, fieldName ); } } ); }