使用m前缀现有字段

时间:2016-03-30 12:21:00

标签: java regex intellij-idea

我试图为我的项目进行结构替换。我有一个包含100多个类的包,每个包含1-20个字段。我们的项目正在迁移到匈牙利表示法,这意味着所有私有字段都必须以m为前缀。

我知道IntelliJ可以为新字段添加前缀,但我不知道进行批量重构的方法 - >重命名所有字段。

正则表达式不起作用,因为所有字段都是通过应用程序在所有类型的上下文,方法调用,赋值,算术运算中使用的......

哪种最佳方法不是手动的?

3 个答案:

答案 0 :(得分:1)

根据类似问题的答案(hereherehere)我猜您可以使用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)

Eclipse提供了一个JDT工具包,它允许java源代码操作,还提供了一个LTK工具包来自动化重构。 广泛使用JDT并且自然(易)使用,也可以假设LTK。 https://eclipse.org/articles/Article-LTK/ltk.html 有关LTK的更多信息,请访问Eclipse的网站。

无法说明IntelliJ的自动重构功能。

答案 2 :(得分:-1)

这不是一个完整的答案,而是一个想法:

  1. 写一个查找非匈牙利字段名称的检查 您可以使用最有可能包含(?<!(负面后瞻)或正常!startsWith的正则表达式。 请注意,将来通知开发人员他们将其命名为“错误&#34;。
  2. 让检查快速解决 为基本类型实现名称转换应该相当简单,因为我猜你有一个如何命名它们的指南。例如String name - &gt; szName
  3. 分析&gt;按名称运行检查...
  4. 针对Inspection视图中的所有匹配项运行修复。
  5. 可悲的是,我不知道如何编写IDEA插件或检查,但我想分享这个想法。在快速搜索IDEA代码后,我想这些将是从以下开始的好候选人: