java将代码从方法插入新类
我试图在bytebuddy之上创建一个库,可以用来对类执行运行时转换。我正在制作的API不能直接使用ByteBuddy将方法代码插入到转换的类中(我希望将未注释的方法添加到转换的类中,并将带有@Inject
注释的方法注入到现有方法的头部或尾部),我解决互操作性不足的方法是使用ByteBuddy创建一个临时类,在我的高级API和ByteBuddy的建议API之间进行转换。但我不知道如何将高级API中的一个方法中的所有代码插入到低级API中定义的方法中,因为我实际上无法使用建议来实现这一点。我有办法做到这一点吗
这是我到目前为止提出的代码
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(???)
}
}
}
}
共 (0) 个答案