簡體   English   中英

使用m前綴現有字段

[英]Prefix existing fields with m

我正在嘗試為我的項目進行結構替換。 我有一個包含100多個類的包,每個包含1-20個字段。 我們的項目正在遷移到匈牙利表示法,這意味着所有私有字段都必須以m為前綴。

我知道IntelliJ可以為新字段添加前綴,但我不知道為所有字段執行批量重構 - >重命名的方法。

正則表達式不起作用,因為所有字段都是通過應用程序在所有類型的上下文,方法調用,賦值,算術運算中使用的......

什么是最好的方法不是手動的?

根據類似問題的答案( 這里這里這里 ),我猜你可以使用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事件(但它是一個開始)。

Eclipse提供了一個JDT工具包,它允許Java源代碼操作,還提供了一個LTK工具包來自動化重構。 廣泛使用JDT並且自然(易)使用,也可以假設LTK。 https://eclipse.org/articles/Article-LTK/ltk.html有關LTK的更多信息,請訪問Eclipse網站。

無法說明IntelliJ的自動重構功能。

這不是一個完整的答案,而是一個想法:

  1. 寫一個查找非匈牙利字段名稱的檢查。
    您可以使用正則表達式,最有可能包括(?<! (負面觀察),或者只是普通!startsWith請注意,這將在將來通知開發人員他們將其命名為“錯誤” ”。
  2. 使檢查快速解決
    為基本類型實現名稱轉換應該相當簡單,因為我猜你有一個如何命名它們的指南。 例如, String name - > szName
  3. 按名稱分析>運行檢查...
  4. 從“ Inspection視圖運行針對所有實例的修復。

可悲的是,我不知道如何編寫IDEA插件或檢查,但我想分享這個想法。 在快速搜索IDEA代碼后,我想這些適合從以下開始:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM