@NotNull private static AnAction[] findActions(@NotNull AnActionEvent e) { PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE); Project project = e.getData(CommonDataKeys.PROJECT); Editor editor = e.getData(LangDataKeys.EDITOR); if (psiFile != null && project != null && editor != null) { List<HighlightInfo.IntentionActionDescriptor> quickFixes = ShowIntentionsPass.getAvailableActions(editor, psiFile, -1); Map<Anchor, List<AnAction>> children = new HashMap<Anchor, List<AnAction>>(); ArrayList<AnAction> first = new ArrayList<AnAction>(); children.put(Anchor.FIRST, first); ArrayList<AnAction> last = new ArrayList<AnAction>(); children.put(Anchor.LAST, last); extractActions(quickFixes, children); if (first.size() > 0 && last.size() > 0) { first.add(new AnSeparator()); } first.addAll(last); if (first.size() > 0) { return first.toArray(new AnAction[first.size()]); } } return AnAction.EMPTY_ARRAY; }
public void invoke( @NotNull final Project project, @NotNull final Editor editor, @NotNull final PsiFile file) { PsiDocumentManager.getInstance(project).commitAllDocuments(); final LookupEx lookup = LookupManagerImpl.getActiveLookup(editor); if (lookup != null) { lookup.showElementActions(); return; } if (HintManagerImpl.getInstanceImpl().performCurrentQuestionAction()) return; // intentions check isWritable before modification: if (!file.isWritable()) return; if (file instanceof PsiCodeFragment) return; TemplateState state = TemplateManagerImpl.getTemplateState(editor); if (state != null && !state.isFinished()) { return; } final DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl) DaemonCodeAnalyzer.getInstance(project); codeAnalyzer.autoImportReferenceAtCursor(editor, file); // let autoimport complete ShowIntentionsPass.IntentionsInfo intentions = new ShowIntentionsPass.IntentionsInfo(); ShowIntentionsPass.getActionsToShow(editor, file, intentions, -1); if (!intentions.isEmpty()) { IntentionHintComponent.showIntentionHint(project, file, editor, intentions, true); } }