Fixed exception when LayeredLexer and tokens with 0 length
[idea/community.git] / python / edu / src / com / jetbrains / python / edu / PyRunCurrentFileAction.java
1 package com.jetbrains.python.edu;
2
3 import com.intellij.execution.Location;
4 import com.intellij.execution.RunManagerEx;
5 import com.intellij.execution.RunnerAndConfigurationSettings;
6 import com.intellij.execution.actions.ConfigurationContext;
7 import com.intellij.execution.executors.DefaultRunExecutor;
8 import com.intellij.execution.runners.ExecutionUtil;
9 import com.intellij.icons.AllIcons;
10 import com.intellij.openapi.actionSystem.AnAction;
11 import com.intellij.openapi.actionSystem.AnActionEvent;
12 import com.intellij.openapi.actionSystem.Presentation;
13 import com.jetbrains.python.PythonFileType;
14 import org.jetbrains.annotations.NotNull;
15
16 /**
17  * @author traff
18  */
19 public class PyRunCurrentFileAction extends AnAction {
20   public PyRunCurrentFileAction() {
21     getTemplatePresentation().setIcon(AllIcons.Actions.Execute);
22   }
23
24   @Override
25   public void update(AnActionEvent e) {
26     Presentation presentation = e.getPresentation();
27     final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext());
28     Location location = context.getLocation();
29     if (location != null && location.getPsiElement().getContainingFile() != null && location.getPsiElement().getContainingFile().getFileType() == PythonFileType.INSTANCE) {
30       presentation.setEnabled(true);
31       presentation.setText("Run '" + location.getPsiElement().getContainingFile().getName() + "'");
32     }
33   }
34
35   @Override
36   public void actionPerformed(AnActionEvent e) {
37     final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext());
38
39     run(context);
40   }
41
42   public static void run(@NotNull ConfigurationContext context) {
43     RunnerAndConfigurationSettings configuration = context.findExisting();
44     final RunManagerEx runManager = (RunManagerEx)context.getRunManager();
45     if (configuration == null) {
46       configuration = context.getConfiguration();
47       if (configuration == null) {
48         return;
49       }
50       runManager.setTemporaryConfiguration(configuration);
51     }
52     runManager.setSelectedConfiguration(configuration);
53
54     ExecutionUtil.runConfiguration(configuration, DefaultRunExecutor.getRunExecutorInstance());
55   }
56 }