fix TEA Menu not working on JDK 15
solved ConcurrentModificationException
Change-Id: Icf06f9ff0f1f24f0974ec0a977af34e9724ebaf1
Signed-off-by: jkubitz <jkubitz-eclipse@gmx.de>
diff --git a/org.eclipse.tea.core/src/org/eclipse/tea/core/internal/model/impl/TaskingContainerImpl.java b/org.eclipse.tea.core/src/org/eclipse/tea/core/internal/model/impl/TaskingContainerImpl.java
index 7ec5117..e73ca15 100644
--- a/org.eclipse.tea.core/src/org/eclipse/tea/core/internal/model/impl/TaskingContainerImpl.java
+++ b/org.eclipse.tea.core/src/org/eclipse/tea/core/internal/model/impl/TaskingContainerImpl.java
@@ -138,27 +138,32 @@
}
private GroupingNode getGroupingNode(String id, Map<String, GroupingNode> allNodes) {
- return allNodes.computeIfAbsent(id, (key) -> {
- GroupingNode node = new GroupingNode(key);
+ GroupingNode groupingNode = allNodes.get(id);
+ if (groupingNode != null) {
+ return groupingNode;
+ }
+ String key = id;
- // prevent endless recursion.
- if (key.equals(TaskingMenuDecoration.NO_GROUPING)) {
- return node;
- }
+ GroupingNode node = new GroupingNode(key);
+ allNodes.put(id, node);
- // if the grouping is defined, use metadata, otherwise we assume it
- // is after the NO_GROUPING node.
- TaskingMenuGroupingId defined = definedGroupingIds.get(key);
- if (defined == null) {
- getGroupingNode(TaskingMenuDecoration.NO_GROUPING, allNodes).after.add(node);
- } else if (!Strings.isNullOrEmpty(defined.afterGroupingId())) {
- getGroupingNode(defined.afterGroupingId(), allNodes).after.add(node);
- } else {
- getGroupingNode(defined.beforeGroupingId(), allNodes).before.add(node);
- }
-
+ // prevent endless recursion.
+ if (key.equals(TaskingMenuDecoration.NO_GROUPING)) {
return node;
- });
+ }
+
+ // if the grouping is defined, use metadata, otherwise we assume it
+ // is after the NO_GROUPING node.
+ TaskingMenuGroupingId defined = definedGroupingIds.get(key);
+ if (defined == null) {
+ getGroupingNode(TaskingMenuDecoration.NO_GROUPING, allNodes).after.add(node);
+ } else if (!Strings.isNullOrEmpty(defined.afterGroupingId())) {
+ getGroupingNode(defined.afterGroupingId(), allNodes).after.add(node);
+ } else {
+ getGroupingNode(defined.beforeGroupingId(), allNodes).before.add(node);
+ }
+
+ return node;
}
@Override