From b1da624f5ce56f68cc78a71a82ceb7110d688fcf Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 23 Oct 2009 20:13:35 +0400 Subject: [PATCH] junit: do not pull statistics events if no statistics were read --- .../execution/junit2/FilterCache.java | 6 ++++++ .../intellij/execution/junit2/SuiteState.java | 2 +- .../intellij/execution/junit2/TestProxy.java | 16 ++++------------ .../execution/junit2/states/TestState.java | 2 +- .../junit2/states/TestStateUpdater.java | 2 +- .../execution/junit2/ui/StatisticsPanel.java | 14 +++----------- .../execution/junit2/ui/StatisticsTable.java | 8 ++++++-- .../ui/model/JUnitListenersNotifier.java | 19 +++++++++++-------- 8 files changed, 33 insertions(+), 36 deletions(-) diff --git a/plugins/junit/src/com/intellij/execution/junit2/FilterCache.java b/plugins/junit/src/com/intellij/execution/junit2/FilterCache.java index 7a3d3c067efb..8d00b0215661 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/FilterCache.java +++ b/plugins/junit/src/com/intellij/execution/junit2/FilterCache.java @@ -25,6 +25,7 @@ import java.util.*; class FilterCache { private final ArrayList myList = new ArrayList(4); + private final Set mySet = new HashSet(); private final Map> myCache = new THashMap>(); public TestProxy[] select(final Filter filter) { @@ -46,9 +47,14 @@ class FilterCache { public void add(final TestProxy test) { myList.add(test); + mySet.add(test); resetCache(); } + public boolean contains(TestProxy test) { + return mySet.contains(test); + } + public AbstractTestProxy detect(final Filter filter) { return filter.detectIn(myList); } diff --git a/plugins/junit/src/com/intellij/execution/junit2/SuiteState.java b/plugins/junit/src/com/intellij/execution/junit2/SuiteState.java index 7c335537db22..2c77fc3956c0 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/SuiteState.java +++ b/plugins/junit/src/com/intellij/execution/junit2/SuiteState.java @@ -83,7 +83,7 @@ public class SuiteState extends TestState { return myCache.get(ALL_TESTS); } - public void changeStateAfterAddingChaildTo(final TestProxy test, final TestProxy child) { + public void changeStateAfterAddingChildTo(final TestProxy test, final TestProxy child) { if (child.getState().getMagnitude() <= getMagnitude()) { test.onStatisticsChanged(); return; diff --git a/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java b/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java index 51d9bdf7f081..5cb86418e9e7 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java +++ b/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java @@ -102,7 +102,6 @@ public class TestProxy extends CompositePrintable implements PrintableTestProxy, pullEvent(new StateChangedEvent(this)); if (myParent != null) myParent.onChanged(this); - fireStatisticsChanged(); myNotifier.onChanged(this); } @@ -163,7 +162,7 @@ public class TestProxy extends CompositePrintable implements PrintableTestProxy, } public void addChild(final TestProxy child) { - if (myChildren.getList().contains(child)) + if (myChildren.contains(child)) return; if (child.getParent() != null) return;//todo throw new RuntimeException("Test: "+child + " already has parent: " + child.getParent()); @@ -174,8 +173,7 @@ public class TestProxy extends CompositePrintable implements PrintableTestProxy, child.fireOnNewPrintable(child); } pullEvent(new NewChildEvent(this, child)); - fireStatisticsChanged(); - getState().changeStateAfterAddingChaildTo(this, child); + getState().changeStateAfterAddingChildTo(this, child); myNotifier.onChildAdded(this, child); } @@ -203,11 +201,6 @@ public class TestProxy extends CompositePrintable implements PrintableTestProxy, } public void onStatisticsChanged() { - myChildren.resetCache(); - fireStatisticsChanged(); - } - - private void fireStatisticsChanged() { myChildren.resetCache(); if (myParent != null) myParent.onStatisticsChanged(); @@ -220,12 +213,11 @@ public class TestProxy extends CompositePrintable implements PrintableTestProxy, } public void setStatistics(final Statistics statistics) { - myChildren.resetCache(); if (!myState.isFinal()) { - LOG.error("" + myState.getMagnitude()); + LOG.error(String.valueOf(myState.getMagnitude())); } myStatistics = statistics; - fireStatisticsChanged(); + onStatisticsChanged(); } public Statistics getStatisticsImpl() { diff --git a/plugins/junit/src/com/intellij/execution/junit2/states/TestState.java b/plugins/junit/src/com/intellij/execution/junit2/states/TestState.java index 6ee58b073e2f..4feaf2b46ae3 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/states/TestState.java +++ b/plugins/junit/src/com/intellij/execution/junit2/states/TestState.java @@ -65,7 +65,7 @@ public abstract class TestState implements Printable { return null; } - public void changeStateAfterAddingChaildTo(final TestProxy test, final TestProxy child) { + public void changeStateAfterAddingChildTo(final TestProxy test, final TestProxy child) { test.setState(new SuiteState(test)); } } diff --git a/plugins/junit/src/com/intellij/execution/junit2/states/TestStateUpdater.java b/plugins/junit/src/com/intellij/execution/junit2/states/TestStateUpdater.java index 014818de040e..958b05b0daea 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/states/TestStateUpdater.java +++ b/plugins/junit/src/com/intellij/execution/junit2/states/TestStateUpdater.java @@ -113,7 +113,7 @@ public class TestStateUpdater implements PacketConsumer { final List children = parent.getChildren(); final TestState parentState = parent.getState(); LOG.assertTrue(parentState instanceof SuiteState); - if (children.indexOf(child) == children.size() - 1) { + if (child.equals(children.get(children.size() - 1))) { ((SuiteState)parentState).setRunning(false); } ((SuiteState)parentState).updateMagnitude(magnitude); diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsPanel.java b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsPanel.java index 9b792c789991..afe48a6e3dac 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsPanel.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsPanel.java @@ -16,8 +16,6 @@ package com.intellij.execution.junit2.ui; -import com.intellij.execution.junit2.NewChildEvent; -import com.intellij.execution.junit2.StatisticsChanged; import com.intellij.execution.junit2.TestEvent; import com.intellij.execution.junit2.TestProxy; import com.intellij.execution.junit2.ui.actions.TestContext; @@ -70,9 +68,9 @@ class StatisticsPanel extends JPanel implements DataProvider{ myTable.setVisible(true); // myTestCaseInfo.setVisible(false); if (myCurrentTest.isLeaf() && myCurrentTest.getParent() != null) { - myChildInfo.onSelectionChanged(myCurrentTest.getParent()); + myChildInfo.updateStatistics(myCurrentTest.getParent()); } else{ - myChildInfo.onSelectionChanged(myCurrentTest); + myChildInfo.updateStatistics(myCurrentTest); } final int idx = myChildInfo.getIndexOf(myCurrentTest); TableUtil.selectRows(myTable, new int[]{idx}); @@ -99,13 +97,7 @@ class StatisticsPanel extends JPanel implements DataProvider{ private class MyJUnitListener extends JUnitAdapter { public void onTestChanged(final TestEvent event) { if (!StatisticsPanel.this.isShowing()) return; - if (event instanceof StatisticsChanged) { - if (myCurrentTest == event.getSource()) - updateStatistics(); - } else if (event instanceof NewChildEvent) { - if (event.getSource() == myCurrentTest && !myTable.isVisible()) - updateStatistics(); - } + if (myCurrentTest == event.getSource()) updateStatistics(); } public void onTestSelected(final TestProxy test) { diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java index 2bd2cb6076f1..2a079c63aac2 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java @@ -47,8 +47,7 @@ public class StatisticsTable extends ListTableModel { private void setTest(final TestProxy test) { if (myTest == test) return; - myTest = test; - changeTableData(); + updateStatistics(test); } private void changeTableData() { @@ -102,4 +101,9 @@ public class StatisticsTable extends ListTableModel { } return -1; } + + public void updateStatistics(TestProxy currentTest) { + myTest = currentTest; + changeTableData(); + } } diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/model/JUnitListenersNotifier.java b/plugins/junit/src/com/intellij/execution/junit2/ui/model/JUnitListenersNotifier.java index f0973f6b6299..74c15e09ffda 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/model/JUnitListenersNotifier.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/model/JUnitListenersNotifier.java @@ -23,12 +23,12 @@ import com.intellij.execution.junit2.segments.DispatchListener; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.util.Alarm; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class JUnitListenersNotifier implements JUnitListener, TestEventsConsumer, DispatchListener, Runnable { private static final Logger LOG = Logger.getInstance("#com.intellij.execution.junit2.ui.model.JUnitListenersNotifier"); @@ -142,7 +142,7 @@ public class JUnitListenersNotifier implements JUnitListener, TestEventsConsumer private void dispatchAllEvents() { //long start = System.currentTimeMillis(); - final List filteredEvents = removeDuplicatesFromEnd(myEventsQueue); + final List filteredEvents = removeDuplicates(myEventsQueue); myEventsQueue.clear(); // MEASURER.start(DISPATCH_SINGLES); for (final TestEvent event : filteredEvents) { @@ -153,11 +153,14 @@ public class JUnitListenersNotifier implements JUnitListener, TestEventsConsumer //System.out.println("duration = " + (System.currentTimeMillis() - start)); } - public static List removeDuplicatesFromEnd(final List list) { - ArrayList result = new ArrayList(list); - Collections.reverse(result); - ContainerUtil.removeDuplicates(result); - Collections.reverse(result); + private static List removeDuplicates(final List list) { + final ArrayList result = new ArrayList(list.size()); + final Set collected = new HashSet(); + for (T t : list) { + if (collected.contains(t)) continue; + collected.add(t); + result.add(t); + } return result; } }