Package org.jetbrains.plugins.clojure.actions

Source Code of org.jetbrains.plugins.clojure.actions.RunClojureConsoleAction

package org.jetbrains.plugins.clojure.actions;

import com.intellij.execution.CantRunException;
import com.intellij.execution.ExecutionHelper;
import com.intellij.facet.FacetManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataKeys;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import org.jetbrains.plugins.clojure.ClojureBundle;
import org.jetbrains.plugins.clojure.ClojureIcons;
import org.jetbrains.plugins.clojure.config.ClojureFacet;
import org.jetbrains.plugins.clojure.config.ClojureFacetType;
import org.jetbrains.plugins.clojure.repl.ClojureConsoleRunner;

import java.util.Arrays;

/**
* @author ilyas
*/
public class RunClojureConsoleAction extends AnAction implements DumbAware {

  public RunClojureConsoleAction() {
    super();
    getTemplatePresentation().setIcon(ClojureIcons.REPL_GO);
  }

  @Override
  public void update(AnActionEvent e) {
    final Module m = getModule(e);
    final Presentation presentation = e.getPresentation();
    if (m == null) {
      presentation.setEnabled(false);
      return;
    }
    presentation.setEnabled(true);
    super.update(e);
  }


  @Override
  public void actionPerformed(AnActionEvent event) {
    final Module module = getModule(event);
    assert module != null : "Module is null";
    final String path = ModuleRootManager.getInstance(module).getContentRoots()[0].getPath();

    final String title = ClojureBundle.message("repl.toolWindowName");
    try {
      ClojureConsoleRunner.run(module, path);
    } catch (CantRunException e) {
      ExecutionHelper.showErrors(module.getProject(), Arrays.<Exception>asList(e), title, null);
    }

  }

  static Module getModule(AnActionEvent e) {
    Module module = e.getData(DataKeys.MODULE);
    if (module == null) {
      final Project project = e.getData(DataKeys.PROJECT);
      if (project == null) return null;
      final Module[] modules = ModuleManager.getInstance(project).getModules();
      if (modules.length == 1) {
        module = modules[0];
      } else {
        for (Module m : modules) {
          final FacetManager manager = FacetManager.getInstance(m);
          final ClojureFacet clFacet = manager.getFacetByType(ClojureFacetType.INSTANCE.getId());
          if (clFacet != null) {
            module = m;
            break;
          }
        }
        if (module == null && modules.length > 0) {
          module = modules[0];
        }
      }
    }
    return module;
  }

}
TOP

Related Classes of org.jetbrains.plugins.clojure.actions.RunClojureConsoleAction

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.