问题标签 [byte-buddy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
575 浏览

java - 如何让 ByteBuddy 创建的子接口继承类型注解?

我有这个伪测试来创建一个子接口,我想从接口 S 复制注释,但它不起作用。我究竟做错了什么?

0 投票
1 回答
101 浏览

java - 使用 ByteBuddy 对方法内的对象进行计数的代理

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

给定以下代码:

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

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

谁能给我一些关于它的链接或样本?

0 投票
1 回答
705 浏览

java - 在 Byte Buddy 中设置 instanceField

我试图弄清楚如何使用 Byte Buddy 设置实例字段的值。文档说:

在调用此类动态类的实例的方法之前,请始终记住为该字段分配一个值。否则,方法委托将导致 NullPointerException。

但是我在文档或单元测试中看不到如何做到这一点。

我的动态课程是:

我看到另一个帖子的答案是拦截任何构造函数并@FieldProxy与 a 一起使用,MethodDelegation但我不知道该怎么做。我在结果方面所做的一切尝试都会导致结果的一些变化.constructor(ElementMatchers.any()).intercept(...)

java.lang.IllegalArgumentException: [] 中的任何一个都不允许来自...的委派

0 投票
1 回答
367 浏览

java - Gson 类中的验证错误

我使用以下代码重新定义一个类:

加载类时class com.google.gson.internal.ConstructorConstructor

它通过构造函数直到最终到达com.google.gson.internal.LinkedTreeMap.

在初始化期间,我得到了一个 VerifyError:

作为参考,拦截器基本上只是手动检查包私有访问(因为包私有方法被公开),然后只调用superCall.call(). 我不相信问题出在那儿。

有任何想法吗?

编辑:这是PackagePrivateInterceptor:公共类 PackagePrivateInterceptor {

EDIT2:以下代码不会触发问题:

但以下是:

0 投票
1 回答
85 浏览

javassist - 如何将输入的用户表达式动态转换为java代码?

我阅读了 byte buddy 和 javassist 文档,我想不知道是否可以转换如下字符串:

正则表达式可以将表达式捕获为:

  1. 转换get foosgetFoos()
  2. Foo类中检查name字段是否存在
  3. 如果字段name不是Number.class转换==为的实例.equals
  4. 表达
  5. 循环并打印结果

我读了一些例子却找不到这样的东西。所以我来这里取你的光。谢谢

0 投票
1 回答
1048 浏览

java - 拦截来自特定命名空间的所有方法/构造器/getter/setter

我有一个这样实现的 Java 代理:

然后转换类:

和一个拦截器:

这样做的问题是它不拦截构造函数,它也会给出这种错误

无法为接口类型定义非公共或非虚拟方法“lambda$static$1”

什么是制作拦截器的最佳方法,它将代理某个域中的类中的每个方法(我希望能够获取方法名称,检查方法参数(如果有的话)并且只是转发执行)。

0 投票
1 回答
1293 浏览

java - 将参数传递给 bytebuddy 拦截器

我有一个使用 Byte Buddy 的拦截器,我想将一个参数传递给拦截器。我怎样才能做到这一点?

中的拦截方法MethodInterceptor是:

如何expressionHandler将构建器传递给拦截器方法?

0 投票
2 回答
1123 浏览

java - 使用 Byte-Buddy 的 Java 代理不起作用

我需要你的帮助来找出我的实施有什么问题......

我正在尝试使用 byte-buddy 实现一个简单的 JVM 运行时分析器。一般来说,我需要的是每个方法调用都将记录在一个堆栈中,我在一个单独的对象中管理该堆栈。

在阅读了几篇文章后,我了解到最好使用“Advise”方法而不是“MethodDelegation”,这就是我得出的结论:

代理.java:

和 ProfilingAdvice.java:

出于某种原因,ProfilingAdvice 类中的“进入”和“退出”方法根本没有被调用。

我究竟做错了什么 ?

谢谢,埃拉德。

0 投票
1 回答
511 浏览

java - ByteBuddy:java.lang.IllegalArgumentException:无法附加未定义的变量:V

com.google.common.collect.ImmutableMultimap$Values从 Google Guava 重新定义类时,我从 ByteBuddy 得到一个 IllegalArgumentException。

内部类是com.google.common.collect.ImmutableCollection其方法ImmutableList<E> createAsList()导致问题的子类。

堆栈跟踪:

我在这里创建了一个触发问题的示例:https ://github.com/erikhakansson/bytebuddytest 该测试是根据我之前的测试修改的,因此那里可能有一些垃圾。

要进行测试,只需运行 mvn clean install 然后运行生成的 jar。

很可能,我做错了什么,但我不知道是什么,所以请帮忙!:)

0 投票
1 回答
589 浏览

java - 使用 ByteBuddy 子类化一个类会导致一个没有任何声明方法的类

我在这里遗漏了一些明显的东西,但是当我使用 ByteBuddy 子类化一个类时,我看不到声明的方法。

结果:

现在使用 ByteBuddy:

结果: