我正在一个java项目中工作,其中很大一部分代码是用我不喜欢的格式化样式编写的(并且也是非标准的),即所有方法参数都是大写的(也是所有本地的)变量)。
在IntellJ上我能够使用“Analyze - > Inspect Code”并实际找到所有出现的大写方法参数(超过1000)。
要解决一个问题我可以做“重构>重命名参数”并且它工作正常(假设没有重叠)。
有没有办法自动执行这个重构(例如:重命名方法参数从大写开始到以小写字母开头的同名)?
答案 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)
我建议你在做任何事之前考虑一些事情:
这是一个危险的重构。小心。
答案 2 :(得分:0)
我不知道在IDE中开箱即用的这种重构有任何直接支持。因为大多数IDE都支持名称重构(经常使用)。您可能需要编写一些可以浏览源代码(AST)的IDE插件,并在场景后面调用重命名重构,以获得与此类格式匹配的参数名称。
答案 3 :(得分:0)
我在相当大规模的文件上做了很多这样的重构,使用TextPad或WildPad,以及一堆reg-ex replace-all。一直为我工作!
我很有信心,如果代码首先使用像Eclipse这样的IDE进行格式化(如果格式不正确),然后是一个涉及方法签名的注册表(范围,返回类型,名称,括号, arg list,bracket)可以设计出来,使用这些工具可以在几秒钟内完成工作。您可能需要多个替换所有注册表。
唯一的计时活动是提出这样一套注册表。
希望这有帮助!