diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java index 2c2693b8ddd1..fcdcb477ee49 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java @@ -40,6 +40,7 @@ public class DefaultActionGroup extends ActionGroup { * Contains instances of Pair */ private final List> myPairs = ContainerUtil.createLockFreeCopyOnWriteList(); + private int myModificationStamp = 0; public DefaultActionGroup() { this(null, false); @@ -72,6 +73,14 @@ public class DefaultActionGroup extends ActionGroup { super(shortName, popup); } + private void incrementModificationStamp() { + myModificationStamp++; + } + + public int getModificationStamp() { + return myModificationStamp; + } + private void addActions(@NotNull List actions) { Set actionSet = new HashSet<>(); List uniqueActions = new ArrayList<>(actions.size()); @@ -84,6 +93,7 @@ public class DefaultActionGroup extends ActionGroup { uniqueActions.add(action); } mySortedChildren.addAll(uniqueActions); + incrementModificationStamp(); } /** @@ -159,7 +169,7 @@ public class DefaultActionGroup extends ActionGroup { myPairs.add(Pair.create(action, constraint)); } addAllToSortedList(actionManager); - + incrementModificationStamp(); return new ActionInGroup(this, action); } @@ -238,6 +248,7 @@ public class DefaultActionGroup extends ActionGroup { Pair pair = myPairs.get(i); if (pair.first.equals(action) || (pair.first instanceof ActionStub && ((ActionStub)pair.first).getId().equals(id))) { myPairs.remove(i); + incrementModificationStamp(); break; } } @@ -250,6 +261,7 @@ public class DefaultActionGroup extends ActionGroup { public final void removeAll() { mySortedChildren.clear(); myPairs.clear(); + incrementModificationStamp(); } /** @@ -259,6 +271,7 @@ public class DefaultActionGroup extends ActionGroup { int index = mySortedChildren.indexOf(oldAction); if (index >= 0) { mySortedChildren.set(index, newAction); + incrementModificationStamp(); return true; } else { @@ -266,6 +279,7 @@ public class DefaultActionGroup extends ActionGroup { Pair pair = myPairs.get(i); if (pair.first.equals(newAction)) { myPairs.set(i, Pair.create(newAction, pair.second)); + incrementModificationStamp(); return true; } } @@ -286,6 +300,7 @@ public class DefaultActionGroup extends ActionGroup { myPairs.clear(); myPairs.addAll(other.myPairs); + incrementModificationStamp(); } @NotNull diff --git a/platform/platform-impl/src/com/intellij/ide/ui/customization/CustomisedActionGroup.java b/platform/platform-impl/src/com/intellij/ide/ui/customization/CustomisedActionGroup.java index d8cc34c303ca..b5af00a7b582 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/customization/CustomisedActionGroup.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/customization/CustomisedActionGroup.java @@ -14,6 +14,7 @@ public class CustomisedActionGroup extends ActionGroup { private final String myRootGroupName; private int mySchemeModificationStamp = -1; + private int myGroupModificationStamp = -1; public CustomisedActionGroup(String shortName, final ActionGroup group, @@ -33,11 +34,13 @@ public class CustomisedActionGroup extends ActionGroup { @Override @NotNull public AnAction[] getChildren(@Nullable final AnActionEvent e) { - int currentStamp = CustomActionsSchema.getInstance().getModificationStamp(); - if (mySchemeModificationStamp < currentStamp || ArrayUtil.isEmpty(myChildren) || + int currentSchemaStamp = CustomActionsSchema.getInstance().getModificationStamp(); + int currentGroupStamp = myGroup instanceof DefaultActionGroup ? ((DefaultActionGroup)myGroup).getModificationStamp() : -1; + if (mySchemeModificationStamp < currentSchemaStamp || myGroupModificationStamp < currentGroupStamp || ArrayUtil.isEmpty(myChildren) || myGroup instanceof DynamicActionGroup || !(myGroup instanceof DefaultActionGroup)) { myChildren = CustomizationUtil.getReordableChildren(myGroup, mySchema, myDefaultGroupName, myRootGroupName, e); - mySchemeModificationStamp = currentStamp; + mySchemeModificationStamp = currentSchemaStamp; + myGroupModificationStamp = currentGroupStamp; } return myChildren; }