Java 如何使用bytebuddy检测无法访问的代码?
我正在努力创建一个可以删除不可访问代码的访问者。目前,代码与ASM 4.0指南中提供的代码相同,即: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
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生成代码,即它基于字段和方法进行操作。要删除死代码,您应该找到一个静态工具或代码覆盖率代理