Как синхронизировать текущий файл в intellij, используя код? - PullRequest
0 голосов
/ 02 января 2019

Я пишу плагин, который будет вставлять методы получения и установки в текущий файл Java. Моя проблема в том, что каждый раз, когда я запускаю плагин, кажется, что никаких изменений не происходит. Однако изменения происходят, но только после того, как я захожу в File | Синхронизировать они отображаются в файле.

У меня включена автоматическая синхронизация настроек, но это не решает проблему. Я также попытался заглянуть в исходный код Intellij Community Edition, чтобы попытаться выяснить, какой код скрывается за 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);
}

Я хотел бы, чтобы код записывался в файл, а затем для синхронизации файла в конце.

Любая помощь или направление было бы здорово.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Следующая строка кода исправляет мою проблему:

VirtualFileManager.getInstance().syncRefresh()
0 голосов
/ 02 января 2019

Глядя на документацию ... возможно, вам следует попробовать передать последние параметры в метод Files.write, который является var args, в последней строке вашего метода вставки. Проверьте это:

"Параметр options указывает, как файл создается или открывается. Если параметры отсутствуют, этот метод работает так, как если бы присутствовали параметры CREATE, TRUNCATE_EXISTING и WRITE."

Попробуйте передать SYNC in. Это предположение, но имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...