2016-09-23 5 views
1

Я боюсь здесь с ASM, чтобы создать посетителя, который может удалить недостижимый код. В настоящее время, код такой же, как это предусмотрено в ASM 4.0 Guide, то есть:Как использовать bytebuddy для обнаружения недостижимого кода?

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

Итак, вопрос: есть ли способ для достижения этой цели с Bytebuddy? Потому что Bytebuddy кажется довольно легко работать. Если да, может ли кто-нибудь сказать мне, что будет процессом?

ответ

1

Byte Buddy не является инструментом анализа кода, он предназначен для генерации кода на основе API класса, то есть он работает на основе полей и методов. Для удаления мертвого кода вы должны найти статический инструмент или агент покрытия кода для этого.

Смежные вопросы