Plugins: Change a few usages of PluginSpec::name to ::id

First, PluginSpec had only field "name". QtC 15 added "id", which became
(a lowercase) copy of "name", and which is the future-proof field to use
when identifying a plugin.

This change turns usages of PluginSpec::name, which are not exclusively
used for user display into PluginSpec::id. In case of id string
comparisons, the plugin id string turns to lowercase.

Change-Id: Ibae3b06a932158cd6946e1b29192b1db0dd78a40
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Alessandro Portale
2024-11-14 13:41:00 +01:00
parent 46856f4869
commit 12d55a5636
17 changed files with 47 additions and 44 deletions

View File

@@ -404,8 +404,8 @@ QStringList lastSessionArgument()
{ {
// using insider information here is not particularly beautiful, anyhow // using insider information here is not particularly beautiful, anyhow
const bool hasProjectExplorer = Utils::anyOf(PluginManager::plugins(), const bool hasProjectExplorer = Utils::anyOf(PluginManager::plugins(),
Utils::equal(&PluginSpec::name, Utils::equal(&PluginSpec::id,
QString("ProjectExplorer"))); QString("projectexplorer")));
return hasProjectExplorer ? QStringList({"-lastsession"}) : QStringList(); return hasProjectExplorer ? QStringList({"-lastsession"}) : QStringList();
} }

View File

@@ -374,7 +374,7 @@ const QStringList PluginManager::allErrors()
return Utils::transform<QStringList>(Utils::filtered(plugins(), [](const PluginSpec *spec) { return Utils::transform<QStringList>(Utils::filtered(plugins(), [](const PluginSpec *spec) {
return spec->hasError() && spec->isEffectivelyEnabled(); return spec->hasError() && spec->isEffectivelyEnabled();
}), [](const PluginSpec *spec) { }), [](const PluginSpec *spec) {
return spec->name().append(": ").append(spec->errorString()); return spec->id().append(": ").append(spec->errorString());
}); });
} }
@@ -444,11 +444,11 @@ QString PluginManager::systemInformation()
result += "Plugin information:\n\n"; result += "Plugin information:\n\n";
PluginSpec * const longestSpec = Utils::maxElementOrDefault( PluginSpec * const longestSpec = Utils::maxElementOrDefault(
d->pluginSpecs, [](const PluginSpec *left, const PluginSpec *right) { d->pluginSpecs, [](const PluginSpec *left, const PluginSpec *right) {
return left->name().size() < right->name().size(); return left->id().size() < right->id().size();
}); });
int size = longestSpec->name().size(); int size = longestSpec->id().size();
for (const PluginSpec *spec : plugins()) { for (const PluginSpec *spec : plugins()) {
result += QLatin1String(spec->isEffectivelyEnabled() ? "+ " : " ") + filled(spec->name(), size) + result += QLatin1String(spec->isEffectivelyEnabled() ? "+ " : " ") + filled(spec->id(), size) +
" " + spec->version() + "\n"; " " + spec->version() + "\n";
} }
QString settingspath = QFileInfo(settings()->fileName()).path(); QString settingspath = QFileInfo(settings()->fileName()).path();
@@ -606,7 +606,7 @@ QString PluginManager::serializedArguments()
if (!rc.isEmpty()) if (!rc.isEmpty())
rc += separator; rc += separator;
rc += QLatin1Char(':'); rc += QLatin1Char(':');
rc += ps->name(); rc += ps->id();
rc += separator; rc += separator;
rc += ps->arguments().join(separator); rc += ps->arguments().join(separator);
} }
@@ -660,7 +660,7 @@ void PluginManager::remoteArguments(const QString &serializedArgument, QObject *
const QStringList arguments = subList(serializedArguments, QLatin1String(argumentKeywordC)); const QStringList arguments = subList(serializedArguments, QLatin1String(argumentKeywordC));
for (const PluginSpec *ps : plugins()) { for (const PluginSpec *ps : plugins()) {
if (ps->state() == PluginSpec::Running) { if (ps->state() == PluginSpec::Running) {
const QStringList pluginOptions = subList(serializedArguments, QLatin1Char(':') + ps->name()); const QStringList pluginOptions = subList(serializedArguments, QLatin1Char(':') + ps->id());
if (IPlugin *plugin = ps->plugin()) { if (IPlugin *plugin = ps->plugin()) {
QObject *socketParent QObject *socketParent
= plugin->remoteCommand(pluginOptions, workingDirectory, arguments); = plugin->remoteCommand(pluginOptions, workingDirectory, arguments);
@@ -815,7 +815,7 @@ void PluginManager::formatPluginOptions(QTextStream &str, int optionIndentation,
void PluginManager::formatPluginVersions(QTextStream &str) void PluginManager::formatPluginVersions(QTextStream &str)
{ {
for (PluginSpec *ps : std::as_const(d->pluginSpecs)) for (PluginSpec *ps : std::as_const(d->pluginSpecs))
str << " " << ps->name() << ' ' << ps->version() << ' ' << ps->description() << '\n'; str << " " << ps->id() << ' ' << ps->version() << ' ' << ps->description() << '\n';
} }
/*! /*!
@@ -969,7 +969,7 @@ void PluginManagerPrivate::startDelayedInitialize()
NANOTRACE_SCOPE("ExtensionSystem", "DelayedInitialize"); NANOTRACE_SCOPE("ExtensionSystem", "DelayedInitialize");
while (!delayedInitializeQueue.empty()) { while (!delayedInitializeQueue.empty()) {
PluginSpec *spec = delayedInitializeQueue.front(); PluginSpec *spec = delayedInitializeQueue.front();
const std::string specName = spec->name().toStdString(); const std::string specName = spec->id().toStdString();
delayedInitializeQueue.pop(); delayedInitializeQueue.pop();
NANOTRACE_SCOPE(specName, specName + "::delayedInitialized"); NANOTRACE_SCOPE(specName, specName + "::delayedInitialized");
profilingReport(">delayedInitialize", spec); profilingReport(">delayedInitialize", spec);
@@ -1622,7 +1622,7 @@ public:
QDir().mkpath(QFileInfo(m_filePath).absolutePath()); QDir().mkpath(QFileInfo(m_filePath).absolutePath());
QFile f(m_filePath); QFile f(m_filePath);
if (f.open(QIODevice::WriteOnly)) { if (f.open(QIODevice::WriteOnly)) {
f.write(spec->name().toUtf8()); f.write(spec->id().toUtf8());
f.write("\n"); f.write("\n");
f.close(); f.close();
} else { } else {
@@ -1744,11 +1744,11 @@ void PluginManagerPrivate::loadPlugin(PluginSpec *spec, PluginSpec::State destSt
if (enableCrashCheck && destState < PluginSpec::Stopped) if (enableCrashCheck && destState < PluginSpec::Stopped)
lockFile.reset(new LockFile(this, spec)); lockFile.reset(new LockFile(this, spec));
const std::string specName = spec->name().toStdString(); const std::string specId = spec->id().toStdString();
switch (destState) { switch (destState) {
case PluginSpec::Running: { case PluginSpec::Running: {
NANOTRACE_SCOPE(specName, specName + "::extensionsInitialized"); NANOTRACE_SCOPE(specId, specId + "::extensionsInitialized");
profilingReport(">initializeExtensions", spec); profilingReport(">initializeExtensions", spec);
spec->initializeExtensions(); spec->initializeExtensions();
profilingReport("<initializeExtensions", profilingReport("<initializeExtensions",
@@ -1782,14 +1782,14 @@ void PluginManagerPrivate::loadPlugin(PluginSpec *spec, PluginSpec::State destSt
} }
switch (destState) { switch (destState) {
case PluginSpec::Loaded: { case PluginSpec::Loaded: {
NANOTRACE_SCOPE(specName, specName + "::load"); NANOTRACE_SCOPE(specId, specId + "::load");
profilingReport(">loadLibrary", spec); profilingReport(">loadLibrary", spec);
spec->loadLibrary(); spec->loadLibrary();
profilingReport("<loadLibrary", spec, &spec->performanceData().load); profilingReport("<loadLibrary", spec, &spec->performanceData().load);
break; break;
} }
case PluginSpec::Initialized: { case PluginSpec::Initialized: {
NANOTRACE_SCOPE(specName, specName + "::initialize"); NANOTRACE_SCOPE(specId, specId + "::initialize");
profilingReport(">initializePlugin", spec); profilingReport(">initializePlugin", spec);
spec->initializePlugin(); spec->initializePlugin();
profilingReport("<initializePlugin", spec, &spec->performanceData().initialize); profilingReport("<initializePlugin", spec, &spec->performanceData().initialize);
@@ -1865,7 +1865,7 @@ void PluginManagerPrivate::addPlugins(const PluginSpecs &specs)
enableDependenciesIndirectly(); enableDependenciesIndirectly();
checkForDuplicatePlugins(); checkForDuplicatePlugins();
// ensure deterministic plugin load order by sorting // ensure deterministic plugin load order by sorting
Utils::sort(pluginSpecs, &PluginSpec::name); Utils::sort(pluginSpecs, &PluginSpec::id);
emit q->pluginsChanged(); emit q->pluginsChanged();
} }
@@ -1966,14 +1966,14 @@ void PluginManagerPrivate::profilingReport(const char *what, const PluginSpec *s
if (m_profilingVerbosity > 0) { if (m_profilingVerbosity > 0) {
qDebug("%-22s %-40s %8lldms (%8lldms)", qDebug("%-22s %-40s %8lldms (%8lldms)",
what, what,
qPrintable(spec->name()), qPrintable(spec->id()),
absoluteElapsedMS, absoluteElapsedMS,
elapsedMS); elapsedMS);
} }
if (target) { if (target) {
QString tc; QString tc;
*target = elapsedMS; *target = elapsedMS;
tc = spec->name() + '_'; tc = spec->id() + '_';
tc += QString::fromUtf8(QByteArray(what + 1)); tc += QString::fromUtf8(QByteArray(what + 1));
Utils::Benchmarker::report("loadPlugins", tc, elapsedMS); Utils::Benchmarker::report("loadPlugins", tc, elapsedMS);
} }
@@ -1997,7 +1997,7 @@ QString PluginManagerPrivate::profilingSummary(qint64 *totalOut) const
continue; continue;
const qint64 t = s->performanceData().total(); const qint64 t = s->performanceData().total();
summary += QString("%1 %2ms ( %3% ) (%4)\n") summary += QString("%1 %2ms ( %3% ) (%4)\n")
.arg(s->name(), -34) .arg(s->id(), -34)
.arg(t, 8) .arg(t, 8)
.arg(100.0 * t / total, 5, 'f', 2) .arg(100.0 * t / total, 5, 'f', 2)
.arg(s->performanceData().summary()); .arg(s->performanceData().summary());

View File

@@ -37,7 +37,7 @@ static bool isBeautifierPluginActivated()
return std::find_if(specs.begin(), return std::find_if(specs.begin(),
specs.end(), specs.end(),
[](ExtensionSystem::PluginSpec *spec) { [](ExtensionSystem::PluginSpec *spec) {
return spec->name() == "Beautifier" && spec->isEffectivelyEnabled(); return spec->id() == "beautifier" && spec->isEffectivelyEnabled();
}) })
!= specs.end(); != specs.end();
} }

View File

@@ -140,7 +140,7 @@ void CorePlugin::loadMimeFromPlugin(const ExtensionSystem::PluginSpec *plugin)
const QJsonValue mimetypes = metaData.value("Mimetypes"); const QJsonValue mimetypes = metaData.value("Mimetypes");
QString mimetypeString; QString mimetypeString;
if (Utils::readMultiLineString(mimetypes, &mimetypeString)) if (Utils::readMultiLineString(mimetypes, &mimetypeString))
Utils::addMimeTypes(plugin->name() + ".mimetypes", mimetypeString.trimmed().toUtf8()); Utils::addMimeTypes(plugin->id() + ".mimetypes", mimetypeString.trimmed().toUtf8());
} }
static void initProxyAuthDialog() static void initProxyAuthDialog()

View File

@@ -46,7 +46,7 @@ bool isClangFormatPresent()
{ {
using namespace ExtensionSystem; using namespace ExtensionSystem;
return Utils::contains(PluginManager::plugins(), [](const PluginSpec *plugin) { return Utils::contains(PluginManager::plugins(), [](const PluginSpec *plugin) {
return plugin->name() == "ClangFormat" && plugin->isEffectivelyEnabled(); return plugin->id() == "clangformat" && plugin->isEffectivelyEnabled();
}); });
}; };

View File

@@ -1761,7 +1761,7 @@ bool isEffectComposerActivated()
{ {
using namespace ExtensionSystem; using namespace ExtensionSystem;
return Utils::anyOf(PluginManager::plugins(), [](PluginSpec *spec) { return Utils::anyOf(PluginManager::plugins(), [](PluginSpec *spec) {
return spec->name() == "EffectComposer" && spec->isEffectivelyEnabled(); return spec->id() == "effectcomposer" && spec->isEffectivelyEnabled();
}); });
} }

View File

@@ -26,7 +26,7 @@ inline ExtensionSystem::IPlugin *licenseCheckerPlugin()
{ {
const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault( const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault(
ExtensionSystem::PluginManager::plugins(), ExtensionSystem::PluginManager::plugins(),
Utils::equal(&ExtensionSystem::PluginSpec::name, QString("LicenseChecker"))); Utils::equal(&ExtensionSystem::PluginSpec::id, QString("licensechecker")));
if (pluginSpec) if (pluginSpec)
return pluginSpec->plugin(); return pluginSpec->plugin();
@@ -37,7 +37,7 @@ inline ExtensionSystem::IPlugin *dsLicenseCheckerPlugin()
{ {
const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault( const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault(
ExtensionSystem::PluginManager::plugins(), ExtensionSystem::PluginManager::plugins(),
Utils::equal(&ExtensionSystem::PluginSpec::name, QString("DSLicense"))); Utils::equal(&ExtensionSystem::PluginSpec::id, QString("dslicense")));
if (pluginSpec) if (pluginSpec)
return pluginSpec->plugin(); return pluginSpec->plugin();
@@ -48,7 +48,7 @@ inline bool dsLicenseCheckerPluginExists()
{ {
const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault( const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault(
ExtensionSystem::PluginManager::plugins(), ExtensionSystem::PluginManager::plugins(),
Utils::equal(&ExtensionSystem::PluginSpec::name, QString("DSLicense"))); Utils::equal(&ExtensionSystem::PluginSpec::id, QString("dslicense")));
return pluginSpec; return pluginSpec;
} }

View File

@@ -324,7 +324,7 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *
// uses simplified Telemetry settings page in case of Qt Design Studio // uses simplified Telemetry settings page in case of Qt Design Studio
ExtensionSystem::PluginSpec *usageStatistic = Utils::findOrDefault(ExtensionSystem::PluginManager::plugins(), [](ExtensionSystem::PluginSpec *p) { ExtensionSystem::PluginSpec *usageStatistic = Utils::findOrDefault(ExtensionSystem::PluginManager::plugins(), [](ExtensionSystem::PluginSpec *p) {
return p->name() == "UsageStatistic"; return p->id() == "usagestatistic";
}); });
if (usageStatistic && usageStatistic->plugin()) if (usageStatistic && usageStatistic->plugin())

View File

@@ -170,7 +170,7 @@ QObject *QmlPreviewWidgetPlugin::getPreviewPlugin()
const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins(); const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins();
const auto pluginIt = std::find_if(specs.cbegin(), specs.cend(), const auto pluginIt = std::find_if(specs.cbegin(), specs.cend(),
[](const ExtensionSystem::PluginSpec *p) { [](const ExtensionSystem::PluginSpec *p) {
return p->name() == "QmlPreview"; return p->id() == "qmlpreview";
}); });
if (pluginIt != specs.cend()) if (pluginIt != specs.cend())

View File

@@ -31,7 +31,7 @@ static ExtensionSystem::IPlugin *getPlugin()
{ {
const ExtensionSystem::PluginSpecs plugins = ExtensionSystem::PluginManager::plugins(); const ExtensionSystem::PluginSpecs plugins = ExtensionSystem::PluginManager::plugins();
auto it = std::find_if(plugins.begin(), plugins.end(), [](ExtensionSystem::PluginSpec *spec) { auto it = std::find_if(plugins.begin(), plugins.end(), [](ExtensionSystem::PluginSpec *spec) {
return spec->name() == "QmlPreview"; return spec->id() == "qmlpreview";
}); });
return (it == plugins.end()) ? nullptr : (*it)->plugin(); return (it == plugins.end()) ? nullptr : (*it)->plugin();

View File

@@ -55,7 +55,7 @@ ExtensionSystem::IPlugin *findMcuSupportPlugin()
{ {
const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault( const ExtensionSystem::PluginSpec *pluginSpec = Utils::findOrDefault(
ExtensionSystem::PluginManager::plugins(), ExtensionSystem::PluginManager::plugins(),
Utils::equal(&ExtensionSystem::PluginSpec::name, QString("McuSupport"))); Utils::equal(&ExtensionSystem::PluginSpec::id, QString("mcusupport")));
if (pluginSpec) if (pluginSpec)
return pluginSpec->plugin(); return pluginSpec->plugin();

View File

@@ -24,17 +24,17 @@ static bool isMultilanguagePresent()
const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins(); const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins();
return std::find_if(specs.cbegin(), specs.cend(), return std::find_if(specs.cbegin(), specs.cend(),
[](ExtensionSystem::PluginSpec *spec) { [](ExtensionSystem::PluginSpec *spec) {
return spec->name() == "MultiLanguage"; return spec->id() == "multilanguage";
}) })
!= specs.cend(); != specs.cend();
} }
static QObject *getPlugin(const QString &pluginName) static QObject *getPlugin(const QString &pluginId)
{ {
const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins(); const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins();
const auto pluginIt = std::find_if( const auto pluginIt = std::find_if(
specs.cbegin(), specs.cend(), [pluginName](const ExtensionSystem::PluginSpec *p) { specs.cbegin(), specs.cend(), [pluginId](const ExtensionSystem::PluginSpec *p) {
return p->name() == pluginName; return p->id() == pluginId;
}); });
if (pluginIt != specs.cend()) if (pluginIt != specs.cend())
@@ -81,7 +81,7 @@ void QmlMultiLanguageAspect::setCurrentLocale(const QString &locale)
if (m_currentLocale == locale) if (m_currentLocale == locale)
return; return;
m_currentLocale = locale; m_currentLocale = locale;
if (auto previewPlugin = getPlugin("QmlPreview")) if (auto previewPlugin = getPlugin("qmlpreview"))
previewPlugin->setProperty("localeIsoCode", locale); previewPlugin->setProperty("localeIsoCode", locale);
} }
@@ -92,7 +92,7 @@ QString QmlMultiLanguageAspect::currentLocale() const
Utils::FilePath QmlMultiLanguageAspect::databaseFilePath() const Utils::FilePath QmlMultiLanguageAspect::databaseFilePath() const
{ {
if (auto previewPlugin = getPlugin("MultiLanguage")) { if (auto previewPlugin = getPlugin("multilanguage")) {
const auto multilanguageDatabaseFilePath = previewPlugin->property("multilanguageDatabaseFilePath"); const auto multilanguageDatabaseFilePath = previewPlugin->property("multilanguageDatabaseFilePath");
return Utils::FilePath::fromString(multilanguageDatabaseFilePath.toString()); return Utils::FilePath::fromString(multilanguageDatabaseFilePath.toString());
} }

View File

@@ -74,7 +74,7 @@ static bool isQmlDesigner(const ExtensionSystem::PluginSpec *spec)
if (!spec) if (!spec)
return false; return false;
return spec->name().contains("QmlDesigner"); return spec->id().contains("qmldesigner");
} }
static bool qmlDesignerEnabled() static bool qmlDesignerEnabled()

View File

@@ -92,8 +92,8 @@ DataModelDownloader::DataModelDownloader(QObject * /* parent */)
const ExtensionSystem::PluginSpec *pluginSpec const ExtensionSystem::PluginSpec *pluginSpec
= Utils::findOrDefault(ExtensionSystem::PluginManager::plugins(), = Utils::findOrDefault(ExtensionSystem::PluginManager::plugins(),
Utils::equal(&ExtensionSystem::PluginSpec::name, Utils::equal(&ExtensionSystem::PluginSpec::id,
QString("StudioWelcome"))); QString("studiowelcome")));
if (!pluginSpec) if (!pluginSpec)
return; return;

View File

@@ -143,14 +143,14 @@ void tst_PluginManager::circularPlugins()
const PluginSpecs plugins = PluginManager::plugins(); const PluginSpecs plugins = PluginManager::plugins();
QCOMPARE(plugins.count(), 3); QCOMPARE(plugins.count(), 3);
for (PluginSpec *spec : plugins) { for (PluginSpec *spec : plugins) {
if (spec->name() == "plugin1") { if (spec->id() == "plugin1") {
QVERIFY(spec->hasError()); QVERIFY(spec->hasError());
QCOMPARE(spec->state(), PluginSpec::Resolved); QCOMPARE(spec->state(), PluginSpec::Resolved);
QCOMPARE(spec->plugin(), static_cast<IPlugin *>(0)); QCOMPARE(spec->plugin(), static_cast<IPlugin *>(0));
} else if (spec->name() == "plugin2") { } else if (spec->id() == "plugin2") {
QVERIFY2(!spec->hasError(), qPrintable(spec->errorString())); QVERIFY2(!spec->hasError(), qPrintable(spec->errorString()));
QCOMPARE(spec->state(), PluginSpec::Running); QCOMPARE(spec->state(), PluginSpec::Running);
} else if (spec->name() == "plugin3") { } else if (spec->id() == "plugin3") {
QVERIFY(spec->hasError()); QVERIFY(spec->hasError());
QCOMPARE(spec->state(), PluginSpec::Resolved); QCOMPARE(spec->state(), PluginSpec::Resolved);
QCOMPARE(spec->plugin(), static_cast<IPlugin *>(0)); QCOMPARE(spec->plugin(), static_cast<IPlugin *>(0));

View File

@@ -2,7 +2,8 @@
"IID" : "plugin", "IID" : "plugin",
"MetaData" : { "MetaData" : {
"Id": "test", "Id": "test",
"Name" : "test", "Name" : "TestPlugin",
"DisplayName" : "Test Plugin",
"Version" : "1.0.1", "Version" : "1.0.1",
"CompatVersion" : "1.0.0", "CompatVersion" : "1.0.0",
"VendorId": "theqtcompanyltd", "VendorId": "theqtcompanyltd",

View File

@@ -92,7 +92,9 @@ void tst_PluginSpec::read()
QVERIFY(spec.readMetaData(metaData("testspecs/spec1.json"))); QVERIFY(spec.readMetaData(metaData("testspecs/spec1.json")));
QCOMPARE(spec.errorString(), QString()); QCOMPARE(spec.errorString(), QString());
QVERIFY(spec.errorString().isEmpty()); QVERIFY(spec.errorString().isEmpty());
QCOMPARE(spec.name(), QString("test")); QCOMPARE(spec.id(), QString("test"));
QCOMPARE(spec.name(), QString("TestPlugin"));
QCOMPARE(spec.displayName(), QString("Test Plugin"));
QCOMPARE(spec.version(), QString("1.0.1")); QCOMPARE(spec.version(), QString("1.0.1"));
QCOMPARE(spec.compatVersion(), QString("1.0.0")); QCOMPARE(spec.compatVersion(), QString("1.0.0"));
QCOMPARE(spec.isRequired(), false); QCOMPARE(spec.isRequired(), false);