diff options
author | Christian Stenger <christian.stenger@qt.io> | 2019-09-12 14:14:54 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2019-09-18 08:03:49 +0000 |
commit | 89ae78fd89d2b26afb77748c3da85886e2463efe (patch) | |
tree | a848107de0645cb82977f5418e55f82cd8da3064 | |
parent | 829cacfb87aa890c1c94e566d58748d13a91ac7b (diff) | |
download | qt-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.cpp | 1 | ||||
-rw-r--r-- | 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<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()); } |