我想更改类的导入,以便它们指向不同的包。 Byte Buddy文档没有提供太多有关如何实现此目标的信息。这是我到目前为止所拥有的:
公共类ProxyPlugin实现net.bytebuddy.build.Plugin {
public DynamicType.Builder apply(DynamicType.Builder builder,TypeDescription typeDescription){
返回builder.name(typeDescription.getPackage()。getName()+“ .proxy。” + typeDescription.getSimpleName());
}
公共布尔匹配项(TypeDescription typeDefinitions){
返回true;
}
}
我的目标是更改某些程序包前缀名称,以使它们后面带有“ .proxy”。请注意,由于目标是接口,因此我只需要更改方法签名。
最佳答案
我找到了解决方案。事实证明,Byte Buddy具有一个名为ClassRemapper的便利类,可以实现我想要的功能:
公共类ProxyPlugin实现net.bytebuddy.build.Plugin {
public DynamicType.Builder apply(DynamicType.Builder builder,TypeDescription typeDescription){
DynamicType.Builder代理= builder.name(typeDescription.getPackage()。getName()+“ .proxy。” + typeDescription.getSimpleName());
proxy = proxy.visit(new AsmVisitorWrapper(){
public int mergeWriter(int flags){
返回0;
}
public int mergeReader(int flags){
返回0;
}
公共ClassVisitor wrap(TypeDescription instrumentedType,ClassVisitor classVisitor,int writerFlags,int readerFlags){
返回新的ClassRemapper(classVisitor,新的Remapper(){
@Override
public String map(String typeName){
如果(typeName.startsWith(“ org / example / api”)&&!typeName.contains(“ / proxy /”)){
返回typeName.substring(0,typeName.lastIndexOf(“ /”)+ 1)+“ proxy” + typeName.substring(typeName.lastIndexOf(“ /”)));
}其他{
返回typeName;
}
}
});
}
});
返回代理;
}
公共布尔匹配项(TypeDescription typeDescription){
返回true;
}
}