Java源重构7000个引用

Hay*_*nce 21 java ide automated-refactoring

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

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

为了了解范围,Eclipse发现了7000个对该方法的引用,因此如果我更改它,整个项目将会失效.我需要几周时间才能手动修复它.

据我所知,Eclipse的Eclipse重构插件不能完成任务,但我真的想让它自动化.
那么,我怎样才能完成工作?

Sea*_*oyd 22

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


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

对于每个java源文件,将其解析为CompilationUnit,创建一个Visitor,可能使用ModifierVisitorAdapter作为基类,并覆盖(至少)visit(MethodCallExpr, arg).然后将更改的CompilationUnit写入新文件并在之后执行diff.

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


Man*_*lva 6

Eclipse可以使用Refactor - > Change Method签名来执行此操作,并为新参数提供默认值.

对于class参数,defaultValue应该是this.getClass(),但是你在注释中是正确的我不知道如何处理方法名参数.