使用 ByteBuddy 计算方法内部对象的代理

Agent to count objects inside methods using ByteBuddy

我正在寻找一种方法来计算在使用 ByteBuddy 进行字节码分析的方法中调用了多少不同的对象。我用字符串解析试过这个,但那是绝对不可能的。另外,我已经检查了 AST,但我应该在这样做之前构建代码,这会花费很多时间。至此,如果我能创建一个代理就更好了。

给定以下代码:

@Test
public void myMethod(){
    Boolean myObj = false;
    assertTrue(myObj).isTrue();
    assertTrue(myObj2).isTrue();
}

此方法的分析输出为:(myObj, myObj2)。由于我是 JavaBuddy 的新手,我的做法是:

创建一个元素匹配器,用于查找用 @Test 注释的方法。 拦截它 ....问题是:我不知道我应该如何计算这些对象或遍历方法语句。

任何人都可以给我一些关于它的链接或示例吗?

为了在方法中检测代码,Byte Buddy 允许您使用 ASM 按指令检测代码。这样做的原因是 ASM 已经非常适合字节码处理 API 并且没有真正充分的理由将其替换为最终会非常相似的东西。

如果您想了解 ASM,their webpage 提供了很棒的文档。

不过,您打算做的事情非常复杂。您基本上必须遵循方法的控制流,以查看在任何时间点将哪个对象分配给哪个变量。此外,某些 classes 无法检测,例如 Boolean class 这就是为什么我建议您寻找另一种方法来解决您的问题。