All Plugins: Use global future synchronizer

Instead of using plugin's own synchronizers. The global
synchronizer does the synchronization just before all the
plugins' destructors run (in sync), so this should be
the right equivalent.

Change-Id: I8d09c9ea4a11b7a703684ad5319191ce310d992e
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2023-04-25 15:32:10 +02:00
parent fde32a206b
commit c67dc5e8d4
26 changed files with 40 additions and 113 deletions

View File

@@ -313,12 +313,6 @@ QObject *CorePlugin::remoteCommand(const QStringList & /* options */,
return res;
}
FutureSynchronizer *CorePlugin::futureSynchronizer()
{
QTC_ASSERT(m_instance, return nullptr);
return &m_instance->m_futureSynchronizer;
}
Environment CorePlugin::startupSystemEnvironment()
{
return m_instance->m_startupSystemEnvironment;

View File

@@ -8,7 +8,6 @@
#include <extensionsystem/iplugin.h>
#include <utils/environment.h>
#include <utils/futuresynchronizer.h>
QT_BEGIN_NAMESPACE
class QMenu;
@@ -47,7 +46,6 @@ public:
const QString &workingDirectory,
const QStringList &args) override;
static Utils::FutureSynchronizer *futureSynchronizer();
static Utils::Environment startupSystemEnvironment();
static Utils::EnvironmentItems environmentChanges();
static void setEnvironmentChanges(const Utils::EnvironmentItems &changes);
@@ -79,7 +77,6 @@ private:
FolderNavigationWidgetFactory *m_folderNavigationWidgetFactory = nullptr;
Utils::Environment m_startupSystemEnvironment;
Utils::EnvironmentItems m_environmentChanges;
Utils::FutureSynchronizer m_futureSynchronizer;
};
} // namespace Internal

View File

@@ -3,13 +3,14 @@
#include "filesystemfilter.h"
#include "../coreplugin.h"
#include "../coreplugintr.h"
#include "../documentmanager.h"
#include "../editormanager/editormanager.h"
#include "../icore.h"
#include "../vcsmanager.h"
#include <extensionsystem/pluginmanager.h>
#include <utils/asynctask.h>
#include <utils/algorithm.h>
#include <utils/checkablemessagebox.h>
@@ -273,7 +274,7 @@ LocatorMatcherTasks FileSystemFilter::matchers()
TreeStorage<LocatorStorage> storage;
const auto onSetup = [this, storage](AsyncTask<void> &async) {
async.setFutureSynchronizer(CorePlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(matches,
*storage,
shortcutString(),

View File

@@ -3,9 +3,10 @@
#include "ilocatorfilter.h"
#include "../coreplugin.h"
#include "../coreplugintr.h"
#include <extensionsystem/pluginmanager.h>
#include <utils/asynctask.h>
#include <utils/fuzzymatcher.h>
#include <utils/tasktree.h>
@@ -273,7 +274,7 @@ ResultsCollector::~ResultsCollector()
return;
m_deduplicator->cancel();
Internal::CorePlugin::futureSynchronizer()->addFuture(m_watcher->future());
ExtensionSystem::PluginManager::futureSynchronizer()->addFuture(m_watcher->future());
}
void ResultsCollector::setFilterCount(int count)

View File

@@ -3,9 +3,10 @@
#include "opendocumentsfilter.h"
#include "../coreplugin.h"
#include "../coreplugintr.h"
#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h>
#include <utils/asynctask.h>
#include <utils/filepath.h>
@@ -81,7 +82,7 @@ LocatorMatcherTasks OpenDocumentsFilter::matchers()
const auto onSetup = [storage](AsyncTask<void> &async) {
const QList<Entry> editorsData = Utils::transform(DocumentModel::entries(),
[](const DocumentModel::Entry *e) { return Entry{e->filePath(), e->displayName()}; });
async.setFutureSynchronizer(CorePlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(matchEditors, *storage, editorsData);
};

View File

@@ -85,7 +85,6 @@
#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/fsengine/fileiconprovider.h>
#include <utils/futuresynchronizer.h>
#include <utils/hostosinfo.h>
#include <utils/macroexpander.h>
#include <utils/mimeutils.h>
@@ -199,7 +198,6 @@ public:
ClangdSettingsPage *m_clangdSettingsPage = nullptr;
CppCodeStyleSettingsPage m_cppCodeStyleSettingsPage;
CppProjectUpdaterFactory m_cppProjectUpdaterFactory;
FutureSynchronizer m_futureSynchronizer;
};
static CppEditorPlugin *m_instance = nullptr;
@@ -633,12 +631,6 @@ bool CppEditorPlugin::usePragmaOnce()
return m_instance->d->m_fileSettings.headerPragmaOnce;
}
FutureSynchronizer *CppEditorPlugin::futureSynchronizer()
{
QTC_ASSERT(m_instance, return nullptr);
return &m_instance->d->m_futureSynchronizer;
}
const QStringList &CppEditorPlugin::headerSearchPaths()
{
return m_instance->d->m_fileSettings.headerSearchPaths;

View File

@@ -5,10 +5,7 @@
#include <extensionsystem/iplugin.h>
namespace Utils {
class FilePath;
class FutureSynchronizer;
}
namespace Utils { class FilePath; }
namespace CppEditor {
class CppCodeModelSettings;
@@ -40,7 +37,6 @@ public:
static Utils::FilePath licenseTemplatePath();
static QString licenseTemplate();
static bool usePragmaOnce();
static Utils::FutureSynchronizer *futureSynchronizer();
void openDeclarationDefinitionInNextSplit();
void openTypeHierarchy();

View File

@@ -12,6 +12,8 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h>
#include <utils/asynctask.h>
#include <utils/fuzzymatcher.h>
@@ -107,7 +109,7 @@ LocatorMatcherTask locatorMatcher(IndexItem::ItemType type, const EntryFromIndex
TreeStorage<LocatorStorage> storage;
const auto onSetup = [=](AsyncTask<void> &async) {
async.setFutureSynchronizer(Internal::CppEditorPlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(matchesFor, *storage, type, converter);
};
return {Async<void>(onSetup), storage};
@@ -303,7 +305,7 @@ LocatorMatcherTask currentDocumentMatcher()
TreeStorage<LocatorStorage> storage;
const auto onSetup = [=](AsyncTask<void> &async) {
async.setFutureSynchronizer(Internal::CppEditorPlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(matchesForCurrentDocument, *storage, currentFileName());
};
return {Async<void>(onSetup), storage};

View File

@@ -13,12 +13,13 @@
#include <coreplugin/editormanager/documentmodel.h>
#include <coreplugin/editormanager/editormanager.h>
#include <extensionsystem/pluginmanager.h>
#include <texteditor/textdocument.h>
#include <utils/asynctask.h>
#include <utils/differ.h>
#include <utils/fileutils.h>
#include <utils/futuresynchronizer.h>
#include <utils/qtcassert.h>
#include <QAction>
@@ -114,8 +115,9 @@ DiffFilesController::DiffFilesController(IDocument *document)
QList<std::optional<FileData>> *outputList = storage.activeStorage();
const auto setupDiff = [this](AsyncTask<FileData> &async, const ReloadInput &reloadInput) {
async.setConcurrentCallData(DiffFile(ignoreWhitespace(), contextLineCount()), reloadInput);
async.setFutureSynchronizer(Internal::DiffEditorPlugin::futureSynchronizer());
async.setConcurrentCallData(
DiffFile(ignoreWhitespace(), contextLineCount()), reloadInput);
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
};
const auto onDiffDone = [outputList](const AsyncTask<FileData> &async, int i) {
if (async.isResultAvailable())
@@ -415,12 +417,10 @@ public:
DiffEditorFactory m_editorFactory;
DiffEditorServiceImpl m_service;
FutureSynchronizer m_futureSynchronizer;
};
DiffEditorPluginPrivate::DiffEditorPluginPrivate()
{
m_futureSynchronizer.setCancelOnWait(true);
//register actions
ActionContainer *toolsContainer = ActionManager::actionContainer(Core::Constants::M_TOOLS);
toolsContainer->insertGroup(Core::Constants::G_TOOLS_DEBUG, Constants::G_TOOLS_DIFF);
@@ -535,12 +535,6 @@ void DiffEditorPlugin::initialize()
d = new DiffEditorPluginPrivate;
}
FutureSynchronizer *DiffEditorPlugin::futureSynchronizer()
{
QTC_ASSERT(s_instance, return nullptr);
return &s_instance->d->m_futureSynchronizer;
}
} // namespace Internal
} // namespace DiffEditor

View File

@@ -6,8 +6,6 @@
#include <coreplugin/diffservice.h>
#include <extensionsystem/iplugin.h>
namespace Utils { class FutureSynchronizer; }
namespace DiffEditor {
namespace Internal {
@@ -34,8 +32,6 @@ public:
void initialize() final;
static Utils::FutureSynchronizer *futureSynchronizer();
private:
class DiffEditorPluginPrivate *d = nullptr;

View File

@@ -5,7 +5,6 @@
#include "diffeditorconstants.h"
#include "diffeditordocument.h"
#include "diffeditorplugin.h"
#include "diffeditortr.h"
#include <coreplugin/find/highlightscrollbarcontroller.h>
@@ -13,6 +12,8 @@
#include <coreplugin/minisplitter.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <extensionsystem/pluginmanager.h>
#include <texteditor/displaysettings.h>
#include <texteditor/fontsettings.h>
#include <texteditor/textdocument.h>
@@ -869,7 +870,7 @@ void SideBySideDiffEditorWidget::restoreState()
void SideBySideDiffEditorWidget::showDiff()
{
m_asyncTask.reset(new AsyncTask<SideBySideShowResults>());
m_asyncTask->setFutureSynchronizer(DiffEditorPlugin::futureSynchronizer());
m_asyncTask->setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
m_controller.setBusyShowing(true);
connect(m_asyncTask.get(), &AsyncTaskBase::done, this, [this] {

View File

@@ -5,12 +5,13 @@
#include "diffeditorconstants.h"
#include "diffeditordocument.h"
#include "diffeditorplugin.h"
#include "diffeditortr.h"
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <extensionsystem/pluginmanager.h>
#include <texteditor/fontsettings.h>
#include <texteditor/textdocument.h>
#include <texteditor/texteditorsettings.h>
@@ -452,7 +453,7 @@ void UnifiedDiffEditorWidget::showDiff()
}
m_asyncTask.reset(new AsyncTask<UnifiedShowResult>());
m_asyncTask->setFutureSynchronizer(DiffEditorPlugin::futureSynchronizer());
m_asyncTask->setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
m_controller.setBusyShowing(true);
connect(m_asyncTask.get(), &AsyncTaskBase::done, this, [this] {
if (m_asyncTask->isCanceled() || !m_asyncTask->isResultAvailable()) {

View File

@@ -97,7 +97,7 @@ LocatorMatcherTasks HelpIndexFilter::matchers()
}
const QStringList cache = m_lastEntry.isEmpty() || !storage->input().contains(m_lastEntry)
? m_allIndicesCache : m_lastIndicesCache;
async.setFutureSynchronizer(HelpPlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(matches, *storage, cache, m_icon);
};
const auto onDone = [this, storage](const AsyncTask<QStringList> &async) {

View File

@@ -43,7 +43,6 @@
#include <texteditor/texteditorconstants.h>
#include <utils/algorithm.h>
#include <utils/futuresynchronizer.h>
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <utils/styledbar.h>
@@ -143,7 +142,6 @@ public:
LocalHelpManager m_localHelpManager;
HelpIndexFilter helpIndexFilter;
FutureSynchronizer m_futureSynchronizer;
};
static HelpPluginPrivate *dd = nullptr;
@@ -397,12 +395,6 @@ HelpWidget *HelpPlugin::modeHelpWidget()
return dd->m_centralWidget;
}
FutureSynchronizer *HelpPlugin::futureSynchronizer()
{
QTC_ASSERT(dd, return nullptr);
return &dd->m_futureSynchronizer;
}
void HelpPluginPrivate::showLinksInCurrentViewer(const QMultiMap<QString, QUrl> &links, const QString &key)
{
if (links.size() < 1)

View File

@@ -10,8 +10,6 @@ QT_BEGIN_NAMESPACE
class QUrl;
QT_END_NAMESPACE
namespace Utils { class FutureSynchronizer; }
namespace Help {
namespace Internal {
@@ -32,7 +30,6 @@ public:
const QString &key);
static HelpViewer *createHelpViewer();
static HelpWidget *modeHelpWidget();
static Utils::FutureSynchronizer *futureSynchronizer();
private:
void initialize() final;

View File

@@ -33,12 +33,6 @@ LanguageClientPlugin *LanguageClientPlugin::instance()
return m_instance;
}
Utils::FutureSynchronizer *LanguageClientPlugin::futureSynchronizer()
{
QTC_ASSERT(m_instance, return nullptr);
return &m_instance->m_futureSynchronizer;
}
void LanguageClientPlugin::initialize()
{
using namespace Core;

View File

@@ -8,8 +8,6 @@
#include <extensionsystem/iplugin.h>
#include <utils/futuresynchronizer.h>
namespace LanguageClient {
class LanguageClientPlugin : public ExtensionSystem::IPlugin
@@ -21,7 +19,6 @@ public:
~LanguageClientPlugin() override;
static LanguageClientPlugin *instance();
static Utils::FutureSynchronizer *futureSynchronizer();
// IPlugin interface
private:
@@ -32,7 +29,6 @@ private:
private:
LanguageClientOutlineWidgetFactory m_outlineFactory;
CallHierarchyFactory m_callHierarchyFactory;
Utils::FutureSynchronizer m_futureSynchronizer;
#ifdef WITH_TESTS
private slots:

View File

@@ -8,11 +8,12 @@
#include "documentsymbolcache.h"
#include "languageclient_global.h"
#include "languageclientmanager.h"
#include "languageclientplugin.h"
#include "languageclienttr.h"
#include <coreplugin/editormanager/editormanager.h>
#include <extensionsystem/pluginmanager.h>
#include <languageserverprotocol/lsptypes.h>
#include <texteditor/textdocument.h>
@@ -78,7 +79,7 @@ LocatorMatcherTask locatorMatcher(Client *client, int maxResultCount,
const QList<SymbolInformation> results = *resultStorage;
if (results.isEmpty())
return TaskAction::StopWithDone;
async.setFutureSynchronizer(LanguageClientPlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(filterResults, *storage, client, results, filter);
return TaskAction::Continue;
};
@@ -138,7 +139,7 @@ LocatorMatcherTask currentDocumentMatcher()
};
const auto onFilterSetup = [=](AsyncTask<void> &async) {
async.setFutureSynchronizer(LanguageClientPlugin::futureSynchronizer());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(filterCurrentResults, *storage, *resultStorage);
};

View File

@@ -11,6 +11,8 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/idocument.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/asynctask.h>
#include <utils/expected.h>
#include <utils/guard.h>
@@ -45,7 +47,6 @@ public:
QTimer timer;
FutureSynchronizer m_futureSynchronizer;
std::unique_ptr<TaskTree> m_taskTree;
};
@@ -291,11 +292,6 @@ Environment ExtraCompiler::buildEnvironment() const
return env;
}
FutureSynchronizer *ExtraCompiler::futureSynchronizer() const
{
return &d->m_futureSynchronizer;
}
void ExtraCompiler::setContent(const FilePath &file, const QByteArray &contents)
{
qCDebug(log).noquote() << Q_FUNC_INFO << contents;
@@ -333,9 +329,9 @@ Tasking::TaskItem ProcessExtraCompiler::taskItemImpl(const ContentProvider &prov
{
const auto setupTask = [=](AsyncTask<FileNameToContentsHash> &async) {
async.setThreadPool(extraCompilerThreadPool());
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(&ProcessExtraCompiler::runInThread, this, command(),
workingDirectory(), arguments(), provider, buildEnvironment());
async.setFutureSynchronizer(futureSynchronizer());
};
const auto taskDone = [=](const AsyncTask<FileNameToContentsHash> &async) {
if (!async.isResultAvailable())

View File

@@ -25,10 +25,7 @@ class QPromise;
class QThreadPool;
QT_END_NAMESPACE
namespace Utils {
class FutureSynchronizer;
class QtcProcess;
}
namespace Utils { class QtcProcess; }
namespace ProjectExplorer {
@@ -64,7 +61,6 @@ signals:
protected:
static QThreadPool *extraCompilerThreadPool();
Utils::FutureSynchronizer *futureSynchronizer() const;
void setContent(const Utils::FilePath &file, const QByteArray &content);
void updateCompileTime();
Utils::Environment buildEnvironment() const;

View File

@@ -18,7 +18,6 @@
#include <projectexplorer/taskhub.h>
#include <utils/fsengine/fileiconprovider.h>
#include <utils/futuresynchronizer.h>
#include <utils/theme/theme.h>
using namespace ProjectExplorer;
@@ -38,7 +37,6 @@ public:
PySideBuildConfigurationFactory buildConfigFactory;
SimpleTargetRunnerFactory runWorkerFactory{{runConfigFactory.runConfigurationId()}};
PythonSettings settings;
FutureSynchronizer m_futureSynchronizer;
};
PythonPlugin::PythonPlugin()
@@ -57,12 +55,6 @@ PythonPlugin *PythonPlugin::instance()
return m_instance;
}
FutureSynchronizer *PythonPlugin::futureSynchronizer()
{
QTC_ASSERT(m_instance, return nullptr);
return &m_instance->d->m_futureSynchronizer;
}
void PythonPlugin::initialize()
{
d = new PythonPluginPrivate;

View File

@@ -5,8 +5,6 @@
#include <extensionsystem/iplugin.h>
namespace Utils { class FutureSynchronizer; }
namespace Python::Internal {
class PythonPlugin final : public ExtensionSystem::IPlugin
@@ -19,7 +17,6 @@ public:
~PythonPlugin() final;
static PythonPlugin *instance();
static Utils::FutureSynchronizer *futureSynchronizer();
private:
void initialize() final;

View File

@@ -9,7 +9,6 @@
#include "pysideuicextracompiler.h"
#include "pythonconstants.h"
#include "pythonlanguageclient.h"
#include "pythonplugin.h"
#include "pythonproject.h"
#include "pythonsettings.h"
#include "pythontr.h"
@@ -17,6 +16,8 @@
#include <coreplugin/icore.h>
#include <coreplugin/editormanager/editormanager.h>
#include <extensionsystem/pluginmanager.h>
#include <languageclient/languageclientmanager.h>
#include <projectexplorer/buildsteplist.h>
@@ -248,7 +249,7 @@ void PythonRunConfigurationPrivate::checkForPySide(const FilePath &python,
});
const auto future = Pip::instance(python)->info(package);
m_watcher.setFuture(future);
PythonPlugin::futureSynchronizer()->addFuture(future);
ExtensionSystem::PluginManager::futureSynchronizer()->addFuture(future);
}
void PythonRunConfigurationPrivate::handlePySidePackageInfo(const PipPackageInfo &pySideInfo,

View File

@@ -2,7 +2,8 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "vcsbasediffeditorcontroller.h"
#include "vcsplugin.h"
#include <extensionsystem/pluginmanager.h>
#include <utils/asynctask.h>
#include <utils/environment.h>
@@ -52,8 +53,8 @@ Tasking::TaskItem VcsBaseDiffEditorController::postProcessTask()
QTC_ASSERT(storage, qWarning("Using postProcessTask() requires putting inputStorage() "
"into task tree's root group."));
const QString inputData = storage ? *storage : QString();
async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
async.setConcurrentCallData(&DiffUtils::readPatchWithPromise, inputData);
async.setFutureSynchronizer(Internal::VcsPlugin::futureSynchronizer());
};
const auto onDiffProcessorDone = [this](const AsyncTask<QList<FileData>> &async) {
setDiffFiles(async.isResultAvailable() ? async.result() : QList<FileData>());

View File

@@ -23,7 +23,6 @@
#include <projectexplorer/project.h>
#include <projectexplorer/projecttree.h>
#include <utils/futuresynchronizer.h>
#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
@@ -41,7 +40,6 @@ class VcsPluginPrivate
public:
CommonOptionsPage m_settingsPage;
QStandardItemModel *m_nickNameModel = nullptr;
FutureSynchronizer m_futureSynchronizer;
};
static VcsPlugin *m_instance = nullptr;
@@ -123,12 +121,6 @@ CommonVcsSettings &VcsPlugin::settings() const
return d->m_settingsPage.settings();
}
FutureSynchronizer *VcsPlugin::futureSynchronizer()
{
QTC_ASSERT(m_instance, return nullptr);
return &m_instance->d->m_futureSynchronizer;
}
/* Delayed creation/update of the nick name model. */
QStandardItemModel *VcsPlugin::nickNameModel()
{

View File

@@ -11,8 +11,6 @@ QT_BEGIN_NAMESPACE
class QStandardItemModel;
QT_END_NAMESPACE
namespace Utils { class FutureSynchronizer; }
namespace VcsBase {
class VcsBaseSubmitEditor;
@@ -36,8 +34,6 @@ public:
CommonVcsSettings &settings() const;
static Utils::FutureSynchronizer *futureSynchronizer();
// Model of user nick names used for the submit
// editor. Stored centrally here to achieve delayed
// initialization and updating on settings change.