[英]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的自動重構功能。
這不是一個完整的答案,而是一個想法:
(?<!
(負面觀察),或者只是普通!startsWith
。 請注意,這將在將來通知開發人員他們將其命名為“錯誤” ”。 String name
- > szName
Inspection
視圖運行針對所有實例的修復。 可悲的是,我不知道如何編寫IDEA插件或檢查,但我想分享這個想法。 在快速搜索IDEA代碼后,我想這些適合從以下開始:
WeakerAccess
檢驗VisibilityInspection.java
,因為它會檢查領域的知名度。 QuickFixFactory.getInstance().createRenameElementFix(element, newName)
重命名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.