From 49942bc06a9976892b5a2f34a320e3c439ce0014 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 5 Sep 2019 10:42:01 +0200 Subject: [PATCH] AutoTest: Re-order responsibilities Keep the timer for syncing frameworks where it is really used, do not create functions that are not necessary at all. Change-Id: Ie0a49a2611dc67510b72562455ea2a1af7b1c538 Reviewed-by: David Schulz --- src/plugins/autotest/autotestplugin.cpp | 2 +- .../autotest/projectsettingswidget.cpp | 5 +++ src/plugins/autotest/projectsettingswidget.h | 2 ++ src/plugins/autotest/testcodeparser.cpp | 1 + src/plugins/autotest/testprojectsettings.cpp | 2 -- src/plugins/autotest/testsettingspage.cpp | 2 +- src/plugins/autotest/testtreemodel.cpp | 34 +++---------------- src/plugins/autotest/testtreemodel.h | 7 +--- 8 files changed, 16 insertions(+), 39 deletions(-) diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp index 15b894e6455..c4980478db8 100644 --- a/src/plugins/autotest/autotestplugin.cpp +++ b/src/plugins/autotest/autotestplugin.cpp @@ -148,7 +148,7 @@ AutotestPluginPrivate::AutotestPluginPrivate(AutotestPlugin *parent) ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory); m_frameworkManager->activateFrameworksFromSettings(q->settings()); - TestTreeModel::instance()->scheduleTestFrameworksSync(true); + TestTreeModel::instance()->synchronizeTestFrameworks(); connect(ProjectExplorer::SessionManager::instance(), &ProjectExplorer::SessionManager::startupProjectChanged, this, [this] { diff --git a/src/plugins/autotest/projectsettingswidget.cpp b/src/plugins/autotest/projectsettingswidget.cpp index 9ed5136dea6..ad44034c302 100644 --- a/src/plugins/autotest/projectsettingswidget.cpp +++ b/src/plugins/autotest/projectsettingswidget.cpp @@ -86,11 +86,15 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p this, [this, generalWidget](int index) { generalWidget->setEnabled(index != 0); m_projectSettings->setUseGlobalSettings(index == 0); + m_syncFrameworksTimer.start(3000); }); connect(m_activeFrameworks, &QTreeWidget::itemChanged, this, &ProjectTestSettingsWidget::onActiveFrameworkChanged); connect(m_runAfterBuild, &QCheckBox::toggled, m_projectSettings, &TestProjectSettings::setRunAfterBuild); + m_syncFrameworksTimer.setSingleShot(true); + connect(&m_syncFrameworksTimer, &QTimer::timeout, + TestTreeModel::instance(), &TestTreeModel::synchronizeTestFrameworks); } void ProjectTestSettingsWidget::populateFrameworks(const QMap &frameworks) @@ -110,6 +114,7 @@ void ProjectTestSettingsWidget::onActiveFrameworkChanged(QTreeWidgetItem *item, { auto id = Core::Id::fromSetting(item->data(column, FrameworkIdRole)); m_projectSettings->activateFramework(id, item->data(0, Qt::CheckStateRole) == Qt::Checked); + m_syncFrameworksTimer.start(3000); } } // namespace Internal diff --git a/src/plugins/autotest/projectsettingswidget.h b/src/plugins/autotest/projectsettingswidget.h index 19639472021..b8d4c28096c 100644 --- a/src/plugins/autotest/projectsettingswidget.h +++ b/src/plugins/autotest/projectsettingswidget.h @@ -25,6 +25,7 @@ #pragma once +#include #include QT_BEGIN_NAMESPACE @@ -55,6 +56,7 @@ private: QComboBox *m_useGlobalSettings = nullptr; QTreeWidget *m_activeFrameworks = nullptr; QCheckBox *m_runAfterBuild = nullptr; + QTimer m_syncFrameworksTimer; }; } // namespace Internal diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index 1081c80acaf..c798c2104e6 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -206,6 +206,7 @@ void TestCodeParser::onQmlDocumentUpdated(const QmlJS::Document::Ptr &document) void TestCodeParser::onStartupProjectChanged(Project *project) { + m_model->synchronizeTestFrameworks(); // we might have project settings if (m_parserState == FullParse || m_parserState == PartialParse) { qCDebug(LOG) << "Canceling scanForTest (startup project changed)"; Core::ProgressManager::instance()->cancelTasks(Constants::TASK_PARSE); diff --git a/src/plugins/autotest/testprojectsettings.cpp b/src/plugins/autotest/testprojectsettings.cpp index 9c1555f106e..29270a7f1bb 100644 --- a/src/plugins/autotest/testprojectsettings.cpp +++ b/src/plugins/autotest/testprojectsettings.cpp @@ -56,14 +56,12 @@ void TestProjectSettings::setUseGlobalSettings(bool useGlobal) if (m_useGlobalSettings == useGlobal) return; m_useGlobalSettings = useGlobal; - TestTreeModel::instance()->scheduleTestFrameworksSync(false); } void TestProjectSettings::activateFramework(const Core::Id &id, bool activate) { if (m_activeTestFrameworks.value(id) != activate) { m_activeTestFrameworks[id] = activate; - TestTreeModel::instance()->scheduleTestFrameworksSync(false); } } diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp index 6cf848b1b0d..d67b2072b08 100644 --- a/src/plugins/autotest/testsettingspage.cpp +++ b/src/plugins/autotest/testsettingspage.cpp @@ -175,7 +175,7 @@ void TestSettingsPage::apply() m_settings->toSettings(Core::ICore::settings()); TestFrameworkManager *frameworkManager = TestFrameworkManager::instance(); frameworkManager->activateFrameworksFromSettings(m_settings); - TestTreeModel::instance()->scheduleTestFrameworksSync(true); + TestTreeModel::instance()->synchronizeTestFrameworks(); if (!changedIds.isEmpty()) TestTreeModel::instance()->rebuild(changedIds); } diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index 66c4d646ed1..747d49c19cf 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -56,11 +56,6 @@ TestTreeModel::TestTreeModel(QObject *parent) : connect(m_parser, &TestCodeParser::parsingFailed, this, &TestTreeModel::sweep, Qt::QueuedConnection); - connect(ProjectExplorer::SessionManager::instance(), - &ProjectExplorer::SessionManager::startupProjectChanged, - this, &TestTreeModel::onStartupProjectChanged); - m_syncFrameworksTimer.setSingleShot(true); - connect(&m_syncFrameworksTimer, &QTimer::timeout, this, &TestTreeModel::syncTestFrameworks); setupParsingConnections(); } @@ -206,17 +201,15 @@ QList TestTreeModel::testItemsByName(const QString &testName) return result; } -void TestTreeModel::syncTestFrameworks() +void TestTreeModel::synchronizeTestFrameworks() { ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); - if (!project) - return; - QList sortedIds; - TestFrameworkManager *frameworkManager = TestFrameworkManager::instance(); - const QVariant useGlobal = project->namedSettings(Constants::SK_USE_GLOBAL); + TestFrameworkManager *manager = TestFrameworkManager::instance(); + const QVariant useGlobal = project ? project->namedSettings(Constants::SK_USE_GLOBAL) + : QVariant(); if (!useGlobal.isValid() || AutotestPlugin::projectSettings(project)->useGlobalSettings()) { - sortedIds = frameworkManager->sortedActiveFrameworkIds(); + sortedIds = manager->sortedActiveFrameworkIds(); } else { // we've got custom project settings const TestProjectSettings *settings = AutotestPlugin::projectSettings(project); const QMap active = settings->activeFrameworks(); @@ -225,17 +218,6 @@ void TestTreeModel::syncTestFrameworks() }); } - syncFrameworks(sortedIds); -} - -void TestTreeModel::scheduleTestFrameworksSync(bool immediately) -{ - m_syncFrameworksTimer.start(immediately ? 0 : 3000); -} - -void TestTreeModel::syncFrameworks(const QList &sortedIds) -{ - TestFrameworkManager *manager = TestFrameworkManager::instance(); // pre-check to avoid further processing when frameworks are unchanged Utils::TreeItem *invisibleRoot = rootItem(); const int count = invisibleRoot->childCount(); @@ -474,12 +456,6 @@ void TestTreeModel::onParseResultReady(const TestParseResultPtr result) handleParseResult(result.data(), rootNode); } -void TestTreeModel::onStartupProjectChanged() -{ - m_syncFrameworksTimer.stop(); - scheduleTestFrameworksSync(true); -} - void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode) { const bool groupingEnabled = diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h index 5b3a06e9e80..c22a8f8d493 100644 --- a/src/plugins/autotest/testtreemodel.h +++ b/src/plugins/autotest/testtreemodel.h @@ -33,7 +33,6 @@ #include #include -#include namespace Autotest { namespace Internal { @@ -59,7 +58,7 @@ public: QList getSelectedTests() const; QList getTestsForFile(const Utils::FilePath &fileName) const; QList testItemsByName(const QString &testName); - void scheduleTestFrameworksSync(bool immediately); + void synchronizeTestFrameworks(); void rebuild(const QList &frameworkIds); #ifdef WITH_TESTS @@ -88,7 +87,6 @@ signals: private: void onParseResultReady(const TestParseResultPtr result); - void onStartupProjectChanged(); void handleParseResult(const TestParseResult *result, TestTreeItem *rootNode); void removeAllTestItems(); void removeTestRootNodes(); @@ -99,12 +97,9 @@ private: explicit TestTreeModel(QObject *parent = nullptr); void setupParsingConnections(); void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled); - void syncTestFrameworks(); - void syncFrameworks(const QList &sortedIds); QList testItemsByName(TestTreeItem *root, const QString &testName); Internal::TestCodeParser *m_parser = nullptr; - QTimer m_syncFrameworksTimer; }; namespace Internal {