mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache ActionGroup#canBePerformed during update and don't run it afterwards
This commit is contained in:
+10
-1
@@ -40,6 +40,7 @@ class ActionUpdater {
|
||||
|
||||
private final Map<AnAction, Presentation> myUpdatedPresentations = ContainerUtil.newIdentityTroveMap();
|
||||
private final Map<ActionGroup, List<AnAction>> myGroupChildren = ContainerUtil.newIdentityTroveMap();
|
||||
private final Map<ActionGroup, Boolean> myCanBePerformedCache = ContainerUtil.newIdentityTroveMap();
|
||||
private final UpdateStrategy myRealUpdateStrategy;
|
||||
private final UpdateStrategy myCheapStrategy;
|
||||
|
||||
@@ -167,7 +168,7 @@ class ActionUpdater {
|
||||
if (actionGroup.hideIfNoVisibleChildren() && !visibleChildren) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
presentation.setEnabled(visibleChildren || strategy.canBePerformed.test(actionGroup));
|
||||
presentation.setEnabled(visibleChildren || canBePerformed(actionGroup, strategy));
|
||||
}
|
||||
|
||||
return Collections.singletonList(child);
|
||||
@@ -179,6 +180,14 @@ class ActionUpdater {
|
||||
return Collections.singletonList(child);
|
||||
}
|
||||
|
||||
boolean canBePerformedCached(ActionGroup group) {
|
||||
return !Boolean.FALSE.equals(myCanBePerformedCache.get(group));
|
||||
}
|
||||
|
||||
private boolean canBePerformed(ActionGroup group, UpdateStrategy strategy) {
|
||||
return myCanBePerformedCache.computeIfAbsent(group, __ -> strategy.canBePerformed.test(group));
|
||||
}
|
||||
|
||||
private Presentation orDefault(AnAction action, Presentation presentation) {
|
||||
return presentation != null ? presentation : myFactory.getPresentation(action);
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public class Utils{
|
||||
}
|
||||
}
|
||||
else if (action instanceof ActionGroup &&
|
||||
!(((ActionGroup)action).canBePerformed(context) &&
|
||||
!(updater.canBePerformedCached((ActionGroup)action) &&
|
||||
!updater.hasVisibleChildren((ActionGroup)action))) {
|
||||
ActionMenu menu = new ActionMenu(context, place, (ActionGroup)action, presentationFactory, enableMnemonics, useDarkIcons);
|
||||
component.add(menu);
|
||||
|
||||
Reference in New Issue
Block a user