From 7cf2e4352c06f1e1fc90bd5d860470ec0310ff6b Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 19 Apr 2024 10:46:50 +0200 Subject: [PATCH] ExtensionSystem: Fix compile without WITH_TESTS PluginSpecImpl::read is used outside of tests, but PluginSpecImpl itself is only exported when WITH_TESTS is on. So compilation without WITH_TESTS would fail. To circumvent this the ::read functions are moved outside of the PluginSpecImpl and friend'd to it. Amends b39b1925189416585933c017e189d04d6e4c478d Change-Id: I4bd8ce087267ab4e059cff2470ff882c7db6fd78 Reviewed-by: Eike Ziller --- src/libs/extensionsystem/pluginmanager.cpp | 4 ++-- src/libs/extensionsystem/pluginspec.cpp | 4 ++-- src/libs/extensionsystem/pluginspec.h | 11 ++++++++--- src/plugins/coreplugin/plugininstallwizard.cpp | 2 +- .../extensionsystem/pluginspec/tst_pluginspec.cpp | 8 ++++---- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index b5a64e20541..60ef637e2f8 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -1790,7 +1790,7 @@ void PluginManagerPrivate::readPluginPaths() // from the file system for (const QString &pluginFile : pluginFiles(pluginPaths)) { - expected_str spec = PluginSpecImpl::read(pluginFile); + expected_str spec = readPluginSpec(pluginFile); if (!spec) { qCInfo(pluginLog).noquote() << QString("Ignoring plugin \"%1\" because: %2").arg(pluginFile).arg(spec.error()); @@ -1801,7 +1801,7 @@ void PluginManagerPrivate::readPluginPaths() // static for (const QStaticPlugin &plugin : QPluginLoader::staticPlugins()) { - expected_str spec = PluginSpecImpl::read(plugin); + expected_str spec = readPluginSpec(plugin); QTC_ASSERT_EXPECTED(spec, continue); newSpecs.append(*spec); } diff --git a/src/libs/extensionsystem/pluginspec.cpp b/src/libs/extensionsystem/pluginspec.cpp index 2e80ef2c79e..3165fb7911b 100644 --- a/src/libs/extensionsystem/pluginspec.cpp +++ b/src/libs/extensionsystem/pluginspec.cpp @@ -692,7 +692,7 @@ namespace { \internal Returns false if the file does not represent a Qt Creator plugin. */ -expected_str PluginSpecImpl::read(const QString &fileName) +expected_str readPluginSpec(const QString &fileName) { auto spec = new PluginSpecImpl; @@ -715,7 +715,7 @@ expected_str PluginSpecImpl::read(const QString &fileName) return spec; } -expected_str PluginSpecImpl::read(const QStaticPlugin &plugin) +expected_str readPluginSpec(const QStaticPlugin &plugin) { auto spec = new PluginSpecImpl; diff --git a/src/libs/extensionsystem/pluginspec.h b/src/libs/extensionsystem/pluginspec.h index 09b8f55618f..58a5ea12a3c 100644 --- a/src/libs/extensionsystem/pluginspec.h +++ b/src/libs/extensionsystem/pluginspec.h @@ -169,8 +169,16 @@ private: std::unique_ptr d; }; +EXTENSIONSYSTEM_EXPORT Utils::expected_str readPluginSpec(const QString &filePath); +EXTENSIONSYSTEM_EXPORT Utils::expected_str readPluginSpec(const QStaticPlugin &plugin); + class EXTENSIONSYSTEM_TEST_EXPORT PluginSpecImpl : public PluginSpec { + friend EXTENSIONSYSTEM_EXPORT Utils::expected_str readPluginSpec( + const QString &filePath); + friend EXTENSIONSYSTEM_EXPORT Utils::expected_str readPluginSpec( + const QStaticPlugin &plugin); + public: ~PluginSpecImpl() override; @@ -184,9 +192,6 @@ public: IPlugin::ShutdownFlag stop() override; void kill() override; - static Utils::expected_str read(const QString &filePath); - static Utils::expected_str read(const QStaticPlugin &plugin); - Utils::expected_str readMetaData(const QJsonObject &pluginMetaData) override; protected: diff --git a/src/plugins/coreplugin/plugininstallwizard.cpp b/src/plugins/coreplugin/plugininstallwizard.cpp index df47cfb0705..cb89748a1af 100644 --- a/src/plugins/coreplugin/plugininstallwizard.cpp +++ b/src/plugins/coreplugin/plugininstallwizard.cpp @@ -154,7 +154,7 @@ void checkContents(QPromise &promise, const FilePath &tempDir) if (promise.isCanceled()) return; it.next(); - expected_str spec = PluginSpecImpl::read(it.filePath()); + expected_str spec = readPluginSpec(it.filePath()); if (spec) { // Is a Qt Creator plugin. Let's see if we find a Core dependency and check the // version diff --git a/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp b/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp index f919ef4139d..b82b12401a3 100644 --- a/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp +++ b/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp @@ -220,7 +220,7 @@ void tst_PluginSpec::experimental() void tst_PluginSpec::locationAndPath() { - Utils::expected_str ps = PluginSpecImpl::read( + Utils::expected_str ps = readPluginSpec( QLatin1String(PLUGIN_DIR) + QLatin1String("/testplugin/") + libraryName(QLatin1String("test"))); QVERIFY(ps); @@ -271,7 +271,7 @@ void tst_PluginSpec::resolveDependencies() void tst_PluginSpec::loadLibrary() { - Utils::expected_str ps = PluginSpecImpl::read( + Utils::expected_str ps = readPluginSpec( QLatin1String(PLUGIN_DIR) + QLatin1String("/testplugin/") + libraryName(QLatin1String("test"))); @@ -291,7 +291,7 @@ void tst_PluginSpec::loadLibrary() void tst_PluginSpec::initializePlugin() { - Utils::expected_str ps = PluginSpecImpl::read( + Utils::expected_str ps = readPluginSpec( QLatin1String(PLUGIN_DIR) + QLatin1String("/testplugin/") + libraryName(QLatin1String("test"))); QVERIFY(ps); @@ -316,7 +316,7 @@ void tst_PluginSpec::initializePlugin() void tst_PluginSpec::initializeExtensions() { - Utils::expected_str ps = PluginSpecImpl::read( + Utils::expected_str ps = readPluginSpec( QLatin1String(PLUGIN_DIR) + QLatin1String("/testplugin/") + libraryName(QLatin1String("test"))); QVERIFY(ps);