From 89ae78fd89d2b26afb77748c3da85886e2463efe Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 12 Sep 2019 14:14:54 +0200 Subject: 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 Reviewed-by: Christian Stenger --- src/plugins/autotest/testcodeparser.cpp | 1 - src/plugins/autotest/testtreemodel.cpp | 35 ++++++++++++++++----------------- 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 &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 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 newlyAdded; + QList 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()); } -- cgit v1.2.1