public class ChainingVisitors {
public static void main(String[] args) throws Exception {
ClassReader reader = new ClassReader("com.foo.Bar");
ClassWriter writer = new ClassWriter(COMPUTE_MAXS | COMPUTE_FRAMES);
ClassVisitor v3 = new Link(3, writer);
ClassVisitor v2 = new Link(2, v3);
ClassVisitor v1 = new Link(1, v2);
reader.accept(v1, 0);
System.out.printf("how many bytes in %s? %d\n", Runnable.class, writer.toByteArray().length);
}
private static class Link extends ClassVisitor {
private final int order;
public Link(int order, ClassVisitor next) {
super(ASM4, next);
this.order = order;
}
@Override public void visit(int i, int i2, String s, String s2, String s3, String[] strings) {
System.out.printf("In visitor %d\n", order);
super.visit(i, i2, s, s2, s3, strings);
}
}
我想将任意的ClassVisitor
s 链交给一个方法。该方法将通过 a 读取类的字节,然后ClassReader
使用 转换类ClassVisitors
,然后通过 a 写入结果ClassWriter
。ClassReader
基本上,我想在“a and ”之间使用这些访问者的链(假设我不控制)ClassWriter
,方法将控制其实例化。
我怎样才能做到这一点?似乎访问者的链接希望您构建从“后”(最后一个链接,绑定到 a ClassWriter
)到“前”(第一个链接,accept()
由 a 编辑ClassReader
)的链。