summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2019-09-12 14:14:54 +0200
committerChristian Stenger <christian.stenger@qt.io>2019-09-18 08:03:49 +0000
commit89ae78fd89d2b26afb77748c3da85886e2463efe (patch)
treea848107de0645cb82977f5418e55f82cd8da3064
parent829cacfb87aa890c1c94e566d58748d13a91ac7b (diff)
downloadqt-creator-89ae78fd89d2b26afb77748c3da85886e2463efe.tar.gz
AutoTest: Reparse only newly added frameworks
Instead of re-parsing all test frameworks trigger a reparse just for the newly added as results for the other should not have changed. Change-Id: I6eb53da04bb927a884d6431e137bfe68f391f2ad Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/plugins/autotest/testcodeparser.cpp1
-rw-r--r--src/plugins/autotest/testtreemodel.cpp35
2 files changed, 17 insertions, 19 deletions
diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp
index f76d1997d2..deb5085ade 100644
--- a/src/plugins/autotest/testcodeparser.cpp
+++ b/src/plugins/autotest/testcodeparser.cpp
@@ -126,7 +126,6 @@ void TestCodeParser::syncTestFrameworks(const QList<Core::Id> &frameworkIds)
QTC_ASSERT(testParser, continue);
m_testCodeParsers.append(testParser);
}
- updateTestTree();
}
void TestCodeParser::emitUpdateTestTree(ITestParser *parser)
diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp
index 747d49c19c..1520dcd6f2 100644
--- a/src/plugins/autotest/testtreemodel.cpp
+++ b/src/plugins/autotest/testtreemodel.cpp
@@ -220,27 +220,26 @@ void TestTreeModel::synchronizeTestFrameworks()
// pre-check to avoid further processing when frameworks are unchanged
Utils::TreeItem *invisibleRoot = rootItem();
- const int count = invisibleRoot->childCount();
- if (count == sortedIds.size()) {
- bool different = false;
- QList<Core::Id> registered = manager->sortedRegisteredFrameworkIds();
- for (int i = 0; i < count; ++i) {
- if (manager->rootNodeForTestFramework(sortedIds[i]) != invisibleRoot->childAt(i)) {
- different = true;
- break;
- }
- }
- if (!different)
- return;
+ QSet<Core::Id> newlyAdded;
+ QList<Utils::TreeItem *> oldFrameworkRoots;
+ for (Utils::TreeItem *oldFrameworkRoot : *invisibleRoot)
+ oldFrameworkRoots.append(oldFrameworkRoot);
+
+ for (Utils::TreeItem *oldFrameworkRoot : oldFrameworkRoots)
+ takeItem(oldFrameworkRoot); // do NOT delete the ptr is still held by TestFrameworkManager
+
+ for (const Core::Id &id : sortedIds) {
+ TestTreeItem *frameworkRootNode = manager->rootNodeForTestFramework(id);
+ invisibleRoot->appendChild(frameworkRootNode);
+ if (!oldFrameworkRoots.removeOne(frameworkRootNode))
+ newlyAdded.insert(id);
}
-
- // remove all currently registered
- removeTestRootNodes();
-
- for (const Core::Id &id : sortedIds)
- rootItem()->appendChild(manager->rootNodeForTestFramework(id));
+ for (Utils::TreeItem *oldFrameworkRoot : oldFrameworkRoots)
+ oldFrameworkRoot->removeChildren();
m_parser->syncTestFrameworks(sortedIds);
+ if (!newlyAdded.isEmpty())
+ m_parser->updateTestTree(newlyAdded);
emit updatedActiveFrameworks(sortedIds.size());
}