我正在编写一个插件,该插件将getter和setter方法插入当前的Java文件中。我的问题是,每次我运行插件时,似乎都没有任何变化。但是,只有在我进入File |之后,更改才会发生。同步它们是否显示在文件中。
我已打开自动同步设置,但这不能解决问题。我还尝试研究了intellij社区版源代码,以尝试查看File | File背后的代码。同步但没有管理。
public void makeGetters(AnActionEvent e, ArrayList<String> lines, String mainLine) {
Project project = e.getProject();
Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
Document document = FileEditorManager.getInstance(project).getSelectedTextEditor().getDocument();
SelectionModel selectionModel = editor.getSelectionModel();
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
String fileName = virtualFile.getPath();
String method = "Error method not initiated";
String returnType = "Error return type not initiated";
for (String s : lines) {
String[] lineArray = s.split(" ");
if (s.contains(" String ")) {
returnType = "String";
}
else if (s.contains(" int ")) {
returnType = "int";
}
else if (s.contains(" double ")) {
returnType = "double";
}
else if (s.contains(" boolean ")) {
returnType = "boolean";
}
method = "\n\tpublic " + returnType + " getName () { return " + lineArray[5] + " }\n";
try {
insert(fileName, method, mainLine);
} catch (IOException exception) {
Messages.showInfoMessage("IOException in insert method", "IOException!");
} finally {
//Some line(s) of code which will synchronize the document.
}
public void insert(String fileName, String method, String mainLine) throws IOException {
Path path = Paths.get(fileName);
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
int line = lines.indexOf(" public static void main(String[] args) {") - 1;
lines.add(line,method);
Files.write(path, lines, StandardCharsets.UTF_8);
}
我希望代码先写入文件,然后最后使文件同步。
任何帮助或指导都是很好的。
答案 0 :(得分:1)
查看documentation ...也许您应该尝试在插入方法的最后一行将最后一个参数传递给Files.write方法,即var args。检查一下:
“ options参数指定如何创建或打开文件。如果不存在任何选项,则此方法就像存在CREATE,TRUNCATE_EXISTING和WRITE选项一样工作。”
尝试传入SYNC。这是一个猜测,但有一定道理。
答案 1 :(得分:1)
下面的代码行解决了我的问题:
#define ON_WM_CHAR() \
{ WM_CHAR, 0, 0, 0, AfxSig_vwww, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< void (AFX_MSG_CALL CWnd::*)(UINT, UINT, UINT) > ( &ThisClass :: OnChar)) },
#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
(memberFxn)) },