使用 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 这就是为什么我建议您寻找另一种方法来解决您的问题。
我正在寻找一种方法来计算在使用 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 这就是为什么我建议您寻找另一种方法来解决您的问题。