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

时间:2010-10-01 12:07:52

标签: java ide refactoring intellij-idea

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

在IntellJ上我能够使用“Analyze - > Inspect Code”并实际找到所有出现的大写方法参数(超过1000)。

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

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

4 个答案:

答案 0 :(得分:8)

使用源分析器

我认为您需要做的是使用像javaparser这样的源代码解析器来执行此操作。

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

希望这有帮助!