diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 3ee99510552..ae2dbf8903b 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -1034,6 +1034,7 @@ void PluginManagerPrivate::readSettings() */ void PluginManagerPrivate::stopAll() { + m_isShuttingDown = true; if (delayedInitializeTimer && delayedInitializeTimer->isActive()) { delayedInitializeTimer->stop(); delete delayedInitializeTimer; @@ -1839,6 +1840,11 @@ bool PluginManager::isInitializationDone() return d->m_isInitializationDone; } +bool PluginManager::isShuttingDown() +{ + return d->m_isShuttingDown; +} + /*! Retrieves one object with \a name from the object pool. \sa addObject() diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index a56cb7ba9d4..ecd0ee70b73 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -129,6 +129,7 @@ public: static QString platformName(); static bool isInitializationDone(); + static bool isShuttingDown(); static void remoteArguments(const QString &serializedArguments, QObject *socket); static void shutdown(); diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index 86c3a6c3624..c7a4291a6b7 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -124,6 +124,7 @@ public: bool m_isInitializationDone = false; bool enableCrashCheck = true; + bool m_isShuttingDown = false; QHash> m_scenarios; QString m_requestedScenario; diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp index fb9f50c3b1f..55b82920329 100644 --- a/src/plugins/coreplugin/locator/locator.cpp +++ b/src/plugins/coreplugin/locator/locator.cpp @@ -26,6 +26,8 @@ #include "../settingsdatabase.h" #include "../statusbarmanager.h" +#include + #include #include #include @@ -147,7 +149,6 @@ bool Locator::delayedInitialize() void Locator::aboutToShutdown() { - m_shuttingDown = true; m_refreshTimer.stop(); m_taskTree.reset(); } @@ -373,7 +374,7 @@ void Locator::setUseCenteredPopupForShortcut(bool center) void Locator::refresh(const QList &filters) { - if (m_shuttingDown) + if (ExtensionSystem::PluginManager::isShuttingDown()) return; m_taskTree.reset(); // Superfluous, just for clarity. The next reset() below is enough. diff --git a/src/plugins/coreplugin/locator/locator.h b/src/plugins/coreplugin/locator/locator.h index 3e73054153c..45d4b650508 100644 --- a/src/plugins/coreplugin/locator/locator.h +++ b/src/plugins/coreplugin/locator/locator.h @@ -67,7 +67,6 @@ private: bool useCenteredPopup = false; }; - bool m_shuttingDown = false; bool m_settingsInitialized = false; Settings m_settings; QList m_filters; diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 87ae84dd8d6..7ccc808b08f 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -686,7 +686,6 @@ public: EngineManager m_engineManager; QTimer m_shutdownTimer; - bool m_shuttingDown = false; Console m_console; // ensure Debugger Console is created before settings are taken into account DebuggerSettings m_debuggerSettings; @@ -1392,7 +1391,7 @@ static QVariant configValue(const QString &name) void DebuggerPluginPrivate::updatePresetState() { - if (m_shuttingDown) + if (PluginManager::isShuttingDown()) return; Project *startupProject = ProjectManager::startupProject(); @@ -1996,8 +1995,6 @@ void DebuggerPluginPrivate::dumpLog() void DebuggerPluginPrivate::aboutToShutdown() { - m_shuttingDown = true; - disconnect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, nullptr); m_shutdownTimer.setInterval(0); @@ -2081,7 +2078,7 @@ QWidget *addSearch(BaseTreeView *treeView) void openTextEditor(const QString &titlePattern0, const QString &contents) { - if (dd->m_shuttingDown) + if (PluginManager::isShuttingDown()) return; QString titlePattern = titlePattern0; IEditor *editor = EditorManager::openEditorWithContents( diff --git a/src/plugins/emacskeys/emacskeysplugin.cpp b/src/plugins/emacskeys/emacskeysplugin.cpp index acb2be5b892..4f1fa8c2c82 100644 --- a/src/plugins/emacskeys/emacskeysplugin.cpp +++ b/src/plugins/emacskeys/emacskeysplugin.cpp @@ -135,11 +135,6 @@ void EmacsKeysPlugin::extensionsInitialized() { } -ExtensionSystem::IPlugin::ShutdownFlag EmacsKeysPlugin::aboutToShutdown() -{ - return SynchronousShutdown; -} - void EmacsKeysPlugin::editorAboutToClose(IEditor *editor) { auto w = qobject_cast(editor->widget()); diff --git a/src/plugins/emacskeys/emacskeysplugin.h b/src/plugins/emacskeys/emacskeysplugin.h index b0acb078cc0..ab124b47ce3 100644 --- a/src/plugins/emacskeys/emacskeysplugin.h +++ b/src/plugins/emacskeys/emacskeysplugin.h @@ -57,7 +57,6 @@ public: void initialize() override; void extensionsInitialized() override; - ShutdownFlag aboutToShutdown() override; private: void editorAboutToClose(Core::IEditor *editor); diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 77b2cbfdee5..5b0fbfa304f 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -28,6 +28,8 @@ #include #include +#include + #include #include #include @@ -194,7 +196,7 @@ public: // temporary container needed since m_resetAssistProvider is changed in resetAssistProviders for (TextDocument *document : m_resetAssistProvider.keys()) resetAssistProviders(document); - if (!LanguageClientManager::isShuttingDown()) { + if (!ExtensionSystem::PluginManager::isShuttingDown()) { // prevent accessing deleted editors on Creator shutdown const QList &editors = Core::DocumentModel::editorsForOpenedDocuments(); for (Core::IEditor *editor : editors) { diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 4de4a0de46e..4c8fa425303 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -14,6 +14,8 @@ #include #include +#include + #include #include @@ -32,6 +34,7 @@ #include +using namespace ExtensionSystem; using namespace LanguageServerProtocol; namespace LanguageClient { @@ -39,7 +42,6 @@ namespace LanguageClient { static Q_LOGGING_CATEGORY(Log, "qtc.languageclient.manager", QtWarningMsg) static LanguageClientManager *managerInstance = nullptr; -static bool g_shuttingDown = false; class LanguageClientManagerPrivate { @@ -139,7 +141,7 @@ void LanguageClientManager::clientStarted(Client *client) QTC_ASSERT(client, return); if (client->state() != Client::Uninitialized) // do not proceed if we already received an error return; - if (g_shuttingDown) { + if (PluginManager::isShuttingDown()) { clientFinished(client); return; } @@ -165,7 +167,7 @@ void LanguageClientManager::clientFinished(Client *client) && client->state() != Client::ShutdownRequested; if (unexpectedFinish) { - if (!g_shuttingDown) { + if (!PluginManager::isShuttingDown()) { const QList &clientDocs = managerInstance->m_clientForDocument.keys(client); if (client->reset()) { @@ -187,7 +189,7 @@ void LanguageClientManager::clientFinished(Client *client) } } deleteClient(client); - if (g_shuttingDown && managerInstance->m_clients.isEmpty()) + if (PluginManager::isShuttingDown() && managerInstance->m_clients.isEmpty()) emit managerInstance->shutdownFinished(); } @@ -236,17 +238,14 @@ void LanguageClientManager::deleteClient(Client *client) for (QList &clients : managerInstance->m_clientsForSetting) clients.removeAll(client); client->deleteLater(); - if (!g_shuttingDown) + if (!PluginManager::isShuttingDown()) emit instance()->clientRemoved(client); } void LanguageClientManager::shutdown() { QTC_ASSERT(managerInstance, return); - if (g_shuttingDown) - return; qCDebug(Log) << "shutdown manager"; - g_shuttingDown = true; const auto clients = managerInstance->clients(); for (Client *client : clients) shutdownClient(client); @@ -258,11 +257,6 @@ void LanguageClientManager::shutdown() }); } -bool LanguageClientManager::isShuttingDown() -{ - return g_shuttingDown; -} - LanguageClientManager *LanguageClientManager::instance() { return managerInstance; diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index fdbbec98b6f..e29d87a0f23 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -48,7 +48,6 @@ public: static void deleteClient(Client *client); static void shutdown(); - static bool isShuttingDown(); static LanguageClientManager *instance(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index e75e23d18f9..d1ad20fe57c 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -177,6 +177,7 @@ */ using namespace Core; +using namespace ExtensionSystem; using namespace ProjectExplorer::Internal; using namespace Utils; @@ -600,7 +601,6 @@ public: BuildPropertiesSettings m_buildPropertiesSettings; QList m_customParsers; bool m_shouldHaveRunConfiguration = false; - bool m_shuttingDown = false; Id m_runMode = Constants::NO_RUN_MODE; ToolChainManager *m_toolChainManager = nullptr; @@ -1632,11 +1632,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er connect(ICore::instance(), &ICore::saveSettingsRequested, dd, &ProjectExplorerPluginPrivate::savePersistentSettings); connect(EditorManager::instance(), &EditorManager::autoSaved, this, [] { - if (!dd->m_shuttingDown && !SessionManager::loadingSession()) + if (!PluginManager::isShuttingDown() && !SessionManager::loadingSession()) SessionManager::saveSession(); }); connect(qApp, &QApplication::applicationStateChanged, this, [](Qt::ApplicationState state) { - if (!dd->m_shuttingDown && state == Qt::ApplicationActive) + if (!PluginManager::isShuttingDown() && state == Qt::ApplicationActive) dd->updateWelcomePage(); }); @@ -2173,7 +2173,7 @@ void ProjectExplorerPluginPrivate::updateRunWithoutDeployMenu() m_runWithoutDeployAction->setVisible(m_projectExplorerSettings.deployBeforeRun); } -ExtensionSystem::IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown() +IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown() { disconnect(ModeManager::instance(), &ModeManager::currentModeChanged, dd, &ProjectExplorerPluginPrivate::currentModeChanged); @@ -2181,8 +2181,6 @@ ExtensionSystem::IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown() ToolChainManager::aboutToShutdown(); ProjectManager::closeAllProjects(); - dd->m_shuttingDown = true; - // Attempt to synchronously shutdown all run controls. // If that fails, fall back to asynchronous shutdown (Debugger run controls // might shutdown asynchronously). @@ -2251,7 +2249,7 @@ bool ProjectExplorerPluginPrivate::closeAllFilesInProject(const Project *project void ProjectExplorerPluginPrivate::savePersistentSettings() { - if (dd->m_shuttingDown) + if (PluginManager::isShuttingDown()) return; if (!SessionManager::loadingSession()) { @@ -2560,7 +2558,7 @@ void ProjectExplorerPluginPrivate::checkForShutdown() { --m_activeRunControlCount; QTC_ASSERT(m_activeRunControlCount >= 0, m_activeRunControlCount = 0); - if (m_shuttingDown && m_activeRunControlCount == 0) + if (PluginManager::isShuttingDown() && m_activeRunControlCount == 0) emit m_instance->asynchronousShutdownFinished(); } diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index 884670c4faf..d695989825d 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -210,11 +210,6 @@ void QmlJSEditorPlugin::extensionsInitialized() QmllsSettingsManager::instance()->setupAutoupdate(); } -ExtensionSystem::IPlugin::ShutdownFlag QmlJSEditorPlugin::aboutToShutdown() -{ - return IPlugin::aboutToShutdown(); -} - Utils::JsonSchemaManager *QmlJSEditorPlugin::jsonManager() { return &m_instance->d->m_jsonManager; diff --git a/src/plugins/qmljseditor/qmljseditorplugin.h b/src/plugins/qmljseditor/qmljseditorplugin.h index cc1b63fe68a..aa653ac6cb0 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.h +++ b/src/plugins/qmljseditor/qmljseditorplugin.h @@ -29,7 +29,6 @@ public: private: void initialize() final; void extensionsInitialized() final; - ShutdownFlag aboutToShutdown() final; class QmlJSEditorPluginPrivate *d = nullptr; };