所以最近我一直在尝试简单地改变一个班级名称而我只是不能。 这是我的代码 InjectorClassNode https://0bin.net/paste/9REMNddwqjm8vRms#hyr4RG3BI36J+kRwMfC2pJoXb7I3+7AwKKzYhhXZQfw
MethodClassNode https://0bin.net/paste/UwKCvIG+cliZAYja#gILvBXxaQ1CyfQ602c6h7UE9dimhlo6q+GbKIwZ6m8B
现在,当我运行它时,它会抛出一个因某些原因而找不到的课程" com / kirelcodes / cool / Task"在导入列表中,我不知道为什么 我很想得到帮助
答案 0 :(得分:1)
所有signature
方法的visit…
参数都是指通用签名,它仅在运行时与Reflection相关。你应该注意到,类访问方法有一个name
参数,它与类的名称更相关,这是你想要改变的。
对于成员来说,desc
参数不是JVM规范所称的“ signature ”并不是那么明显,但至少ASM API在调用通用签名描述参数signature
。这就是为什么signature
可以是null
,这表明不涉及泛型类型。对于您想要实现的目标,您必须调整desc
参数。
此外,请注意,在处理说明时,您不仅需要关心转换所引用成员的所有者类型,还必须调整成员的类型。顺便说一下,在这个上下文中命名参数arg0, arg1, arg2, arg3, arg4
没有帮助。可能存在您未处理的其他类型引用,例如ldc
指令可以推送Class
引用,但我不知道这是否对此特定情况有用。
答案 1 :(得分:0)
在您的解决方案中,您只能在一个文件中重命名该类。其他类将不会收到名称更改的通知,并将抛出“ClassNotFoundException”。
在使用Remapper完成修改后重命名该类会更好。