provide tooltip for "run" guter icon

This commit is contained in:
Alexey Kudravtsev
2015-11-17 15:44:51 +03:00
parent 4f4ba9986a
commit 8a67ff12ee
3 changed files with 66 additions and 14 deletions
@@ -17,27 +17,41 @@ package com.intellij.execution.application;
import com.intellij.execution.lineMarker.ExecutorAction;
import com.intellij.execution.lineMarker.RunLineMarkerContributor;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.Nullable;
/**
* @author Dmitry Avdeev
*/
public class ApplicationRunLineMarkerProvider extends RunLineMarkerContributor {
@Nullable
@Override
public Info getInfo(PsiElement e) {
public Info getInfo(final PsiElement e) {
if (isIdentifier(e)) {
PsiElement element = e.getParent();
if (element instanceof PsiClass && PsiMethodUtil.findMainInClass((PsiClass)element) != null)
return new Info(ApplicationConfigurationType.getInstance().getIcon(), null, ExecutorAction.getActions(0));
if (element instanceof PsiMethod && "main".equals(((PsiMethod)element).getName()) && PsiMethodUtil.isMainMethod((PsiMethod)element))
return new Info(ApplicationConfigurationType.getInstance().getIcon(), null, ExecutorAction.getActions(0));
if (element instanceof PsiClass && PsiMethodUtil.findMainInClass((PsiClass)element) != null ||
element instanceof PsiMethod && "main".equals(((PsiMethod)element).getName()) && PsiMethodUtil.isMainMethod((PsiMethod)element)) {
final AnAction[] actions = ExecutorAction.getActions(0);
return new Info(ApplicationConfigurationType.getInstance().getIcon(), new Function<PsiElement, String>() {
@Override
public String fun(final PsiElement element) {
return StringUtil.join(ContainerUtil.mapNotNull(actions, new Function<AnAction, String>() {
@Override
public String fun(AnAction action) {
return getText(action, element);
}
}), "\n");
}
}, actions);
}
}
return null;
}