From ab2ef0defba4c267559c55384cab09f3c82e49fe Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 9 Dec 2010 19:10:21 +0300 Subject: [PATCH] make map of orderable to order to avoid costly retrieval of order during sorting --- .../src/com/intellij/openapi/extensions/LoadingOrder.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/platform/extensions/src/com/intellij/openapi/extensions/LoadingOrder.java b/platform/extensions/src/com/intellij/openapi/extensions/LoadingOrder.java index 79e032879c8f..fb23ea896a56 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/LoadingOrder.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/LoadingOrder.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.graph.CachingSemiGraph; import com.intellij.util.graph.DFSTBuilder; import com.intellij.util.graph.GraphGenerator; +import gnu.trove.THashMap; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -125,6 +126,9 @@ public class LoadingOrder { } } + final Map cachedMap = new THashMap(); + for(Orderable o:orderables) cachedMap.put(o, o.getOrder()); + DFSTBuilder builder = new DFSTBuilder(new GraphGenerator(new CachingSemiGraph(new GraphGenerator.SemiGraph() { public Collection getNodes() { final ArrayList list = new ArrayList(Arrays.asList(orderables)); @@ -133,7 +137,7 @@ public class LoadingOrder { } public Iterator getIn(final Orderable n) { - final LoadingOrder order = n.getOrder(); + final LoadingOrder order = cachedMap.get(n); Set predecessors = new LinkedHashSet(); for (final String id : order.myAfter) { @@ -145,7 +149,7 @@ public class LoadingOrder { String id = n.getOrderId(); for (final Orderable orderable : orderables) { - final LoadingOrder hisOrder = orderable.getOrder(); + final LoadingOrder hisOrder = cachedMap.get(orderable); if (StringUtil.isNotEmpty(id) && hisOrder.myBefore.contains(id) || order.myLast && !hisOrder.myLast || hisOrder.myFirst && !order.myFirst) {