我试图为我的项目进行结构替换。我有一个包含100多个类的包,每个包含1-20个字段。我们的项目正在迁移到匈牙利表示法,这意味着所有私有字段都必须以m为前缀。
我知道IntelliJ可以为新字段添加前缀,但我不知道进行批量重构的方法 - >重命名所有字段。
正则表达式不起作用,因为所有字段都是通过应用程序在所有类型的上下文,方法调用,赋值,算术运算中使用的......
哪种最佳方法不是手动的?
答案 0 :(得分:1)
根据类似问题的答案(here,here和 here)我猜您可以使用javaparser并创建一个小实用程序来为您执行重构。
这是让你入门的东西:
import japa.parser.JavaParser;
import japa.parser.ParseException;
import japa.parser.ast.CompilationUnit;
import japa.parser.ast.body.FieldDeclaration;
import japa.parser.ast.body.VariableDeclaratorId;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class HungarianNotationRefactor {
public static void main(String[] args) throws IOException, ParseException {
File file = new File(args[0]);
CompilationUnit cu;
cu = JavaParser.parse(file);
// get all types in file
cu.getTypes()
.stream()
// get all members
.flatMap(type -> type.getMembers().stream())
// filter only fields
.filter(member -> member instanceof FieldDeclaration)
.map(member -> (FieldDeclaration) member)
// get all variables and rename
.flatMap(field -> field.getVariables().stream())
.forEach(var -> var.setId(new VariableDeclaratorId("m_" + var.getId())));
try (FileWriter out = new FileWriter(file)) {
out.append(cu.toString());
}
System.out.println(cu.toString());
}
}
这将重命名字段,但不会重命名this.field
次出现(但这是一个开始)。
答案 1 :(得分:0)
无法说明IntelliJ的自动重构功能。
答案 2 :(得分:-1)
这不是一个完整的答案,而是一个想法:
(?<!
(负面后瞻)或正常!startsWith
的正则表达式。 请注意,将来通知开发人员他们将其命名为“错误&#34;。 String name
- &gt; szName
Inspection
视图中的所有匹配项运行修复。可悲的是,我不知道如何编写IDEA插件或检查,但我想分享这个想法。在快速搜索IDEA代码后,我想这些将是从以下开始的好候选人:
WeakerAccess
在VisibilityInspection.java
进行检查,因为它会检查现场的可见性。QuickFixFactory.getInstance().createRenameElementFix(element, newName)
重命名