Search code examples
intellij-ideaintellij-plugin

Synchronize virtual file to the physical file in the Intellij IDEA plugin


I'm implementing the plugin for Intellij IDEA that needs file to be saved before executing action. Action is shell command, it requires file name to be passed as the command-line parameter.

AFAIK Idea saves (synchronizes) files on frame deactivation, so if I right-click on the file, and click on my action - old version of file will be used. If I go to other window, return to Idea and click my action - current version of the file will be used.

I've read this doc about Virtual File System, and found that I can trigger file to be loaded from file system (e.g. VirtualFileManager.syncRefresh() or VirtualFileManager.asyncRefresh()). I tried this hoping it would work, but it doesn't.

Question is: how to manually (programmatically) save file?


Solution

  • While formatting my question I checked one more time, and this worked for me.

    FileDocumentManager.getInstance().saveAllDocuments();
    

    EDIT
    Finally came up with the solution

    FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
    Document document = fileDocumentManager.getDocument(file);
    if (document != null) {
        fileDocumentManager.saveDocument(document);
    }