Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用bytebuddy检测无法访问的代码?_Java_Bytecode_Byte Buddy - Fatal编程技术网

Java 如何使用bytebuddy检测无法访问的代码?

Java 如何使用bytebuddy检测无法访问的代码?,java,bytecode,byte-buddy,Java,Bytecode,Byte Buddy,我正在努力创建一个可以删除不可访问代码的访问者。目前,代码与ASM 4.0指南中提供的代码相同,即: public class RemoveDeadCodeAdapter extends MethodVisitor { String owner; MethodVisitor next; public RemoveDeadCodeAdapter(String owner, int access, String name, String desc, MethodVisitor

我正在努力创建一个可以删除不可访问代码的访问者。目前,代码与ASM 4.0指南中提供的代码相同,即:

public class RemoveDeadCodeAdapter extends MethodVisitor {
  String owner;
  MethodVisitor next;
  public RemoveDeadCodeAdapter(String owner, int access, String name,
      String desc, MethodVisitor mv) {
    super(Opcodes.ASM4, new MethodNode(access, name, desc, null, null));
    this.owner = owner;
    next = mv;
  }
  @Override public void visitEnd() {
    MethodNode mn = (MethodNode) mv;
    Analyzer<BasicValue> a =
        new Analyzer<BasicValue>(new BasicInterpreter());
    try {
      a.analyze(owner, mn);
      Frame<BasicValue>[] frames = a.getFrames();
      AbstractInsnNode[] insns = mn.instructions.toArray();
      for (int i = 0; i < frames.length; ++i) {
        if (frames[i] == null && !(insns[i] instanceof LabelNode)) {
          mn.instructions.remove(insns[i]);
        }
      }
    } catch (AnalyzerException ignored) {
    }
    mn.accept(next);
  }
}
public类RemoveDeadCodeAdapter扩展MethodVisitor{
字符串所有者;
方法:下一步;
public RemoveDeadCodeAdapter(字符串所有者、int访问、字符串名称、,
字符串描述,MethodVisitor mv){
super(Opcodes.ASM4,newmethodnode(access,name,desc,null,null));
this.owner=所有者;
next=mv;
}
@重写公共void visitEnd(){
MethodNode mn=(MethodNode)mv;
分析仪a=
新分析仪(新BasicInterpreter());
试一试{
a、 分析(所有者,mn);
Frame[]frames=a.getFrames();
AbstractInsnNode[]insns=mn.instructions.toArray();
对于(int i=0;i

所以,问题是:有没有办法用Bytebuddy实现这一点?因为Bytebuddy似乎很容易操作。如果是,有人能告诉我这个过程是什么吗?

Byte Buddy不是代码分析工具,它用于基于类的API生成代码,即它基于字段和方法进行操作。要删除死代码,您应该找到一个静态工具或代码覆盖率代理