7000 个引用的 Java 源代码重构

2022-09-01 22:53:52

我需要更改整个代码库中使用的方法的签名。

具体来说,该方法将采用两个额外的参数 (),这两个参数需要由调用方提供,具体取决于调用它的方法。我不能简单地通过或类似。void log(String)Class c, String methodNamenull

为了说明范围,Eclipse发现了7000个对该方法的引用,所以如果我改变它,整个项目就会下降。我需要数周时间才能手动修复它。

据我所知,Eclipse的Eclipse重构插件无法胜任这项任务,但我真的想自动化它。
那么,我该如何完成工作呢?


答案 1

太好了,我可以复制我以前的答案,我只需要编辑一点点:


我认为你需要做的是使用像javaparser这样的源代码解析器来做到这一点。

对于每个java源文件,将其解析为CompuitiveUnit,创建一个访问者,可能使用ModifierVisitor作为基类,并覆盖(至少)visit(MethodCallExpr,arg)。然后将更改后的编译单元写入新文件,然后执行差异。

我建议不要更改原始源文件,但是创建一个影子文件树可能是一个好主意(例如,旧文件:,新文件,这样您就可以比较整个目录)。src/main/java/com/mycompany/MyClass.javasrc/main/refactored/com/mycompany/MyClass.java


答案 2

Eclipse 能够使用 Refactor -> Change Method 签名来做到这一点,并为新参数提供默认值

对于类参数,默认值应该是 this.getClass(),但你在你的注释中是正确的,我不知道如何对方法名称参数执行操作。


推荐