Package ideah.repl.actions

Source Code of ideah.repl.actions.LoadHaskellFileInConsoleAction

package ideah.repl.actions;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataKeys;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightVirtualFile;
import ideah.parser.HaskellFile;

import java.io.File;

public final class LoadHaskellFileInConsoleAction extends HaskellConsoleActionBase {

    public void actionPerformed(AnActionEvent e) {
        Editor editor = e.getData(DataKeys.EDITOR);
        if (editor == null)
            return;
        Project project = editor.getProject();
        if (project == null)
            return;
        Document document = editor.getDocument();
        PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
        if (psiFile == null || !(psiFile instanceof HaskellFile))
            return;
        VirtualFile virtualFile = psiFile.getVirtualFile();
        if (virtualFile == null)
            return;
        String filePath = virtualFile.getPath();
        if (filePath == null)
            return;

        PsiDocumentManager.getInstance(project).commitAllDocuments();
        FileDocumentManager.getInstance().saveAllDocuments();

        String command = ":load \"" + filePath + "\""; // todo
        executeCommand(project, command);
    }

    private static String getActionFile(AnActionEvent e) {
        Module m = RunHaskellConsoleAction.getModule(e);
        if (m == null)
            return null;
        Editor editor = e.getData(DataKeys.EDITOR);
        if (editor == null || editor.getProject() == null)
            return null;
        PsiFile psiFile = PsiDocumentManager.getInstance(editor.getProject()).getPsiFile(editor.getDocument());
        if (psiFile == null || !(psiFile instanceof HaskellFile))
            return null;
        VirtualFile virtualFile = psiFile.getVirtualFile();
        if (virtualFile == null || virtualFile instanceof LightVirtualFile)
            return null;
        return virtualFile.getPath();
    }

    @Override
    public void update(AnActionEvent e) {
        Presentation presentation = e.getPresentation();
        String filePath = getActionFile(e);
        if (filePath == null) {
            presentation.setVisible(false);
        } else {
            File f = new File(filePath);
            presentation.setVisible(true);
            presentation.setText(String.format("Load \"%s\" in Haskell REPL", f.getName()));
        }
    }
}
TOP

Related Classes of ideah.repl.actions.LoadHaskellFileInConsoleAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.