package org.jetbrains.plugins.clojure.repl.actions; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKeys; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import org.jetbrains.plugins.clojure.ClojureIcons; import org.jetbrains.plugins.clojure.psi.api.ClojureFile; /** * @author ilyas */ public class LoadClojureFileInConsoleAction extends ClojureConsoleActionBase { public LoadClojureFileInConsoleAction() { getTemplatePresentation().setIcon(ClojureIcons.REPL_LOAD); } @Override public void update(AnActionEvent e) { super.update(e); } @Override public void actionPerformed(AnActionEvent e) { final Editor editor = e.getData(DataKeys.EDITOR); if (editor == null) return; final Project project = editor.getProject(); if (project == null) return; final Document document = editor.getDocument(); final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document); if (psiFile == null || !(psiFile instanceof ClojureFile)) return; final VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile == null) return; final String filePath = virtualFile.getPath(); if (filePath == null) return; final String command = "(load-file \"" + filePath + "\")"; PsiDocumentManager.getInstance(project).commitAllDocuments(); FileDocumentManager.getInstance().saveAllDocuments(); executeCommand(project, command); } }