您的位置:首页 > 其它

HelloAsm(二)

2015-06-23 14:10 295 查看
根据制定的方法名和修饰符删除一个方法:

public class RemoveMethodAdapter extends ClassAdapter {
private String mName;
private String mDesc;

public RemoveMethodAdapter(ClassVisitor cv, String name, String desc) {
super(cv);

mName = name;
mDesc = desc;
}

@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
if (name.equals(mName) && desc.equals(mDesc)) {
return null;
}

return super.visitMethod(access, name, desc, signature, exceptions);
}

}

ClassWriter cw2 = new ClassWriter(0);
ClassAdapter ca2 = new RemoveMethodAdapter(cw2, "compareTo", "(Ljava/lang/Object;)I");
ClassReader cr4 = new ClassReader(b1);
cr4.accept(ca2, 0);

byte[] b2 = cw2.toByteArray();
ClassReader cr5 = new ClassReader(b2);
cr5.accept(cp, 0);


增加类成员:

public class AddFieldAdapter extends ClassAdapter {
private int fAcc;
private String mName;
private String mDesc;
private boolean isFieldPresent;

public AddFieldAdapter(ClassVisitor cv, int acc, String name, String desc) {
super(cv);

fAcc = acc;
mName = name;
mDesc = desc;
}

@Override
public FieldVisitor visitField(int access, String name, String desc,
String signature, Object value) {
if (name.equals(desc)) {
isFieldPresent = true;
}

return super.visitField(access, name, desc, signature, value);
}

@Override
public void visitEnd() {
if (!isFieldPresent) {
FieldVisitor fv = cv.visitField(fAcc, mName, mDesc, null, null);

if (fv != null) {
fv.visitEnd();
}
}

super.visitEnd();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: