From 928550ed791461eafcb0b6ac37db1d222df03bb2 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 25 Jul 2019 13:59:27 +0200 Subject: [PATCH] PluginManager: Provide helpful output if unit tests cannot be run We can show the errors directly, rather than asking the user to re-run Creator with different arguments. Change-Id: If8196ba3a496406f5539a91e678d26a9a4801b85 Reviewed-by: Eike Ziller --- src/libs/extensionsystem/pluginmanager.cpp | 14 ++++++++++++-- src/libs/extensionsystem/pluginmanager.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index dd9cde1e334..d24e7429dbd 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -354,6 +354,15 @@ bool PluginManager::hasError() }); } +const QStringList PluginManager::allErrors() +{ + return Utils::transform(Utils::filtered(plugins(), [](const PluginSpec *spec) { + return spec->hasError() && spec->isEffectivelyEnabled(); + }), [](const PluginSpec *spec) { + return spec->name().append(": ").append(spec->errorString()); + }); +} + /*! Returns all plugins that require \a spec to be loaded. Recurses into dependencies. */ @@ -1120,8 +1129,9 @@ static TestPlan generateCustomTestPlan(IPlugin *plugin, void PluginManagerPrivate::startTests() { if (PluginManager::hasError()) { - qWarning("Errors occurred while loading plugins, skipping test run. " - "For details, start without \"-test\" option."); + qWarning("Errors occurred while loading plugins, skipping test run."); + for (const QString &pluginError : PluginManager::allErrors()) + qWarning("%s", qPrintable(pluginError)); QTimer::singleShot(1, QCoreApplication::instance(), &QCoreApplication::quit); return; } diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index c926d07f4af..d65571bfb7c 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -93,6 +93,7 @@ public: static const QVector plugins(); static QHash> pluginCollections(); static bool hasError(); + static const QStringList allErrors(); static QSet pluginsRequiringPlugin(PluginSpec *spec); static QSet pluginsRequiredByPlugin(PluginSpec *spec);