gpt4 book ai didi

java - 将方法中的代码插入到新类中

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:24 27 4
gpt4 key购买 nike

我正在尝试在 bytebuddy 之上创建一个库,可用于对类执行运行时转换。我正在制作的 API 不能直接与 ByteBuddy 一起操作,将方法代码插入到转换后的类中(我希望将未注释的方法全新添加到转换后的类中,并将用 @Inject 注释的方法注入(inject)到现有方法的头部或尾部),针对缺乏互操作性的问题,我的解决方案是使用 ByteBuddy 创建一个临时类,该类在我的更高级别 API 和 ByteBuddy 的建议 API 之间进行转换。但我不知道如何将较高级别 API 中的方法中的所有代码插入到较低级别 API 中定义的方法中,因为我实际上无法使用 Advice 来执行此操作。有什么办法可以做到这一点吗?

这是我到目前为止想到的代码

fun apply(vararg transformerClasses: Class<*>) {
for(clazz in transformerClasses) {
val builder = ByteBuddy()
.subclass(clazz)
val mixinAnnotation = clazz.getAnnotation(Mixin::class.java) as? Mixin ?: throw RuntimeException("Passed transformer class without @Mixin annotation")
val mixinTarget = mixinAnnotation.target.java

for(method in clazz.declaredMethods) {
if(method.annotations.isEmpty()) {
builder.defineMethod(method.name, method.returnType, Visibility.PUBLIC, Ownership.STATIC)
.intercept(???)
}
}
}
}

最佳答案

确实没有一个好的方法可以做到这一点,但一种解决方案是创建一个 TypeDescription 实例,您可以在其中将自定义注释转换为 Byte Buddy 的注释。您可以使用 InstrumentedType 的实现来创建此类对象。

如果类名匹配,Byte Buddy 仍会从正确的类文件中读取字节码。类文件和类型描述之间没有一致性检查。

关于java - 将方法中的代码插入到新类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45197281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com