mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
call isAvailable() for DO_NOT_SHOW fixes in tests
This commit is contained in:
+24
-19
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.daemon.impl.ShowIntentionsPass;
|
||||
import com.intellij.codeInsight.hint.HintManager;
|
||||
@@ -43,9 +42,11 @@ import gnu.trove.THashSet;
|
||||
import gnu.trove.TObjectHashingStrategy;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author cdr
|
||||
@@ -53,10 +54,8 @@ import java.util.*;
|
||||
public class IntentionListStep implements ListPopupStep<IntentionActionWithTextCaching>, SpeedSearchFilter<IntentionActionWithTextCaching> {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.IntentionListStep");
|
||||
|
||||
private final Set<IntentionActionWithTextCaching> myCachedIntentions =
|
||||
ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedErrorFixes =
|
||||
ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedIntentions = ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedErrorFixes = ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedInspectionFixes = ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedGutters = ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
private final Set<IntentionActionWithTextCaching> myCachedNotifications = ContainerUtil.newConcurrentSet(ACTION_TEXT_AND_CLASS_EQUALS);
|
||||
@@ -81,10 +80,10 @@ public class IntentionListStep implements ListPopupStep<IntentionActionWithTextC
|
||||
private Runnable myFinalRunnable;
|
||||
|
||||
public IntentionListStep(@Nullable IntentionHintComponent intentionHintComponent,
|
||||
@NotNull ShowIntentionsPass.IntentionsInfo intentions,
|
||||
@Nullable Editor editor,
|
||||
@NotNull PsiFile file,
|
||||
@NotNull Project project) {
|
||||
@NotNull ShowIntentionsPass.IntentionsInfo intentions,
|
||||
@Nullable Editor editor,
|
||||
@NotNull PsiFile file,
|
||||
@NotNull Project project) {
|
||||
this(intentionHintComponent, editor, file, project);
|
||||
wrapAndUpdateActions(intentions, false); // when create bulb do not update actions again since it would impede the EDT
|
||||
}
|
||||
@@ -204,12 +203,10 @@ public class IntentionListStep implements ListPopupStep<IntentionActionWithTextC
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!option.isAvailable(myProject, containingEditor, containingFile)) {
|
||||
// if option is not applicable in injected fragment, check in host file context
|
||||
if (containingEditor == myEditor || !option.isAvailable(myProject, myEditor, myFile)) {
|
||||
continue;
|
||||
}
|
||||
else if (!option.isAvailable(myProject, containingEditor, containingFile)) {
|
||||
// if option is not applicable in injected fragment, check in host file context
|
||||
if (containingEditor == myEditor || !option.isAvailable(myProject, myEditor, myFile)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
IntentionActionWithTextCaching textCaching = new IntentionActionWithTextCaching(option);
|
||||
@@ -302,12 +299,20 @@ public class IntentionListStep implements ListPopupStep<IntentionActionWithTextC
|
||||
return optionIntention instanceof Iconable ? ((Iconable)optionIntention).getIcon(0) : null;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@TestOnly
|
||||
public Map<IntentionAction, List<IntentionAction>> getActionsWithSubActions() {
|
||||
Map<IntentionAction, List<IntentionAction>> result = ContainerUtil.newLinkedHashMap();
|
||||
for (IntentionActionWithTextCaching action : getValues()) {
|
||||
List<IntentionActionWithTextCaching> subActions = getSubStep(action, action.getToolName()).getValues();
|
||||
result.put(action.getAction(), ContainerUtil.map(subActions, IntentionActionWithTextCaching::getAction));
|
||||
|
||||
for (IntentionActionWithTextCaching cached : getValues()) {
|
||||
IntentionAction action = cached.getAction();
|
||||
if (ShowIntentionActionsHandler.chooseFileForAction(myFile, myEditor, action) == null) continue;
|
||||
|
||||
List<IntentionActionWithTextCaching> subActions = getSubStep(cached, cached.getToolName()).getValues();
|
||||
List<IntentionAction> options = subActions.stream()
|
||||
.map(IntentionActionWithTextCaching::getAction)
|
||||
.filter(option -> ShowIntentionActionsHandler.chooseFileForAction(myFile, myEditor, option) != null)
|
||||
.collect(Collectors.toList());
|
||||
result.put(action, options);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+9
-2
@@ -178,8 +178,7 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed("codeassists.quickFix");
|
||||
((FeatureUsageTrackerImpl)FeatureUsageTracker.getInstance()).getFixesStats().registerInvocation();
|
||||
|
||||
final Pair<PsiFile, Editor> pair = hostEditor != null ? chooseBetweenHostAndInjected(hostFile, hostEditor,
|
||||
(psiFile, editor) -> availableFor(psiFile, editor, action)) : Pair.<PsiFile, Editor>create(hostFile, null);
|
||||
final Pair<PsiFile, Editor> pair = chooseFileForAction(hostFile, hostEditor, action);
|
||||
if (pair == null) return false;
|
||||
|
||||
CommandProcessor.getInstance().executeCommand(project, () -> TransactionGuard.getInstance().submitTransactionAndWait(() -> {
|
||||
@@ -200,4 +199,12 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
|
||||
}), text, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static Pair<PsiFile, Editor> chooseFileForAction(@NotNull PsiFile hostFile,
|
||||
@Nullable Editor hostEditor,
|
||||
@NotNull IntentionAction action) {
|
||||
return hostEditor == null ? Pair.create(hostFile, null) :
|
||||
chooseBetweenHostAndInjected(hostFile, hostEditor, (psiFile, editor) -> availableFor(psiFile, editor, action));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user