我可以自动重构整个java项目并将大写方法参数重命名为小写吗?

我正在一个java项目中,其中很大一部分代码是用我不喜欢的格式化样式编写的(并且也是非标准的),即所有方法参数都是大写的(以及所有局部变量)。

在IntellJ上我可以使用“分析 – >检查代码”并实际查找所有出现的大写方法参数(超过1000)。

要解决一个问题,我可以做“重构>重命名参数”,它工作正常(让我们假设没有重叠)。

有没有办法自动执行这个重构(例如:重命名方法参数从大写开始到以小写字母开头的同名)?

使用源分析器

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

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

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

我建议你在做任何事之前考虑一些事情:

  1. 如果这是团队合作,请通知您的团队。
  2. 如果是雇主,请通知您的老板。
  3. 如果将其检入版本控制系统,请意识到你将有一些差异从wazoo出来。
  4. 如果未将其签入版本控制系统,请将其签入。
  5. 在进行任何更改之前进行备份。
  6. 在行为未发生变化之前和之后,查看是否要检查一些测试。

这是一个危险的重构。 小心。

我不知道在IDE中开箱即用的这种重构有任何直接支持。 因为大多数IDE都支持名称重构(经常使用)。 您可能需要编写一些可以浏览源代码(AST)的IDE插件,并在场景后面调用重命名重构,以获得与此类格式匹配的参数名称。

我在相当大规模的文件上做了很多这样的重构,使用TextPad或WildPad,以及一堆reg-ex replace-all。 一直为我工作!

我相信,如果代码首先使用像Eclipse这样的IDE进行格式化(如果格式不正确),然后是一个涉及方法签名的注册表(范围,返回类型,名称,括号,arg列表,可以设计支架),使用这些工具可以在几秒钟内完成工作。 您可能需要多个替换 – 所有reg-ex集。

唯一的计时活动是提出这样一套注册表。

希望这可以帮助!