1 package com.jetbrains.python.edu;
3 import com.intellij.codeHighlighting.Pass;
4 import com.intellij.codeInsight.daemon.LineMarkerInfo;
5 import com.intellij.codeInsight.daemon.LineMarkerProvider;
6 import com.intellij.execution.actions.RunContextAction;
7 import com.intellij.execution.executors.DefaultRunExecutor;
8 import com.intellij.icons.AllIcons;
9 import com.intellij.openapi.actionSystem.ActionGroup;
10 import com.intellij.openapi.actionSystem.AnAction;
11 import com.intellij.openapi.actionSystem.DefaultActionGroup;
12 import com.intellij.openapi.application.ApplicationManager;
13 import com.intellij.openapi.editor.markup.GutterIconRenderer;
14 import com.intellij.psi.PsiElement;
15 import com.intellij.util.Function;
16 import org.jetbrains.annotations.NotNull;
17 import org.jetbrains.annotations.Nullable;
19 import java.util.Collection;
20 import java.util.List;
25 public class PyExecuteFileLineMarkerProvider implements LineMarkerProvider {
28 public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) {
33 public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
34 if (elements.isEmpty()) {
37 PsiElement element = elements.get(0).getContainingFile();
38 final RunContextAction runAction = new RunContextAction(DefaultRunExecutor.getRunExecutorInstance());
39 final LineMarkerInfo<PsiElement> markerInfo = new LineMarkerInfo<PsiElement>(
40 element, 0, AllIcons.Actions.Execute, Pass.UPDATE_OVERRIDEN_MARKERS,
41 new Function<PsiElement, String>() {
43 public String fun(PsiElement e) {
44 return "Execute '" + e.getContainingFile().getName() + "'";
47 GutterIconRenderer.Alignment.RIGHT) {
50 public GutterIconRenderer createGutterRenderer() {
51 return new LineMarkerGutterIconRenderer<PsiElement>(this) {
53 public AnAction getClickAction() {
59 public ActionGroup getPopupMenuActions() {
60 final DefaultActionGroup group = new DefaultActionGroup();
62 final PyExecuteFileExtensionPoint[] extensions =
63 ApplicationManager.getApplication().getExtensions(PyExecuteFileExtensionPoint.EP_NAME);
64 for (PyExecuteFileExtensionPoint extension : extensions) {
65 final AnAction action = extension.getRunAction();
76 result.add(markerInfo);