From 8f81d91cb75ebd6d5befe6478c36698f815f7e9e Mon Sep 17 00:00:00 2001 From: Testo Nakada Date: Sun, 1 Nov 2015 10:13:42 -0800 Subject: Performance improvement for topological sort --- src/main/java/org/testng/internal/Graph.java | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/testng/internal/Graph.java b/src/main/java/org/testng/internal/Graph.java index df121a8f..d833610e 100644 --- a/src/main/java/org/testng/internal/Graph.java +++ b/src/main/java/org/testng/internal/Graph.java @@ -54,10 +54,7 @@ public class Graph { node.addPredecessor(predecessor); addNeighbor(tm, predecessor); // Remove these two nodes from the independent list - if (null == m_independentNodes) { - m_independentNodes = Maps.newHashMap(); - m_independentNodes.putAll(m_nodes); - } + initializeIndependentNodes(); m_independentNodes.remove(predecessor); m_independentNodes.remove(tm); ppp(" REMOVED " + predecessor + " FROM INDEPENDENT OBJECTS"); @@ -103,9 +100,7 @@ public class Graph { public void topologicalSort() { ppp("================ SORTING"); m_strictlySortedNodes = Lists.newArrayList(); - if (null == m_independentNodes) { - m_independentNodes = Maps.newHashMap(); - } + initializeIndependentNodes(); // // Clone the list of nodes but only keep those that are @@ -159,6 +154,20 @@ public class Graph { } } + private void initializeIndependentNodes() { + if (null == m_independentNodes) { + List> list = Lists.newArrayList(m_nodes.values()); + // Ideally, we should not have to sort this. However, due to a bug where it treats all the methods as + // dependent nodes. Therefore, all the nodes were mostly sorted alphabetically. So we need to keep + // the behavior for now. + Collections.sort(list); + m_independentNodes = Maps.newLinkedHashMap(); + for (Node node : list) { + m_independentNodes.put(node.getObject(), node); + } + } + } + private void dumpSortedNodes() { System.out.println("====== SORTED NODES"); for (T n : m_strictlySortedNodes) { -- cgit v1.2.3