BareMetal: Apply "static" pattern to GdbServerProviderManager

Change-Id: I7fe76b5912808ac0855ef09cd6d31afdf9225f6f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Orgad Shaneh
2017-03-17 10:36:50 +02:00
committed by Orgad Shaneh
parent db6c85cdc9
commit d9a66a5406
9 changed files with 41 additions and 43 deletions

View File

@@ -148,8 +148,7 @@ void BareMetalDebugSupport::startExecution()
auto dev = qSharedPointerCast<const BareMetalDevice>(m_runControl->device()); auto dev = qSharedPointerCast<const BareMetalDevice>(m_runControl->device());
QTC_ASSERT(dev, return); QTC_ASSERT(dev, return);
const GdbServerProvider *p = GdbServerProviderManager::instance()->findProvider( const GdbServerProvider *p = GdbServerProviderManager::findProvider(dev->gdbServerProviderId());
dev->gdbServerProviderId());
QTC_ASSERT(p, return); QTC_ASSERT(p, return);
m_state = StartingRunner; m_state = StartingRunner;

View File

@@ -67,7 +67,7 @@ QString BareMetalDevice::gdbServerProviderId() const
void BareMetalDevice::setGdbServerProviderId(const QString &id) void BareMetalDevice::setGdbServerProviderId(const QString &id)
{ {
m_gdbServerProviderId = id; m_gdbServerProviderId = id;
GdbServerProvider *provider = GdbServerProviderManager::instance()->findProvider(id); GdbServerProvider *provider = GdbServerProviderManager::findProvider(id);
QTC_ASSERT(provider, return); QTC_ASSERT(provider, return);
const QString channel = provider->channel(); const QString channel = provider->channel();
const int colon = channel.indexOf(QLatin1Char(':')); const int colon = channel.indexOf(QLatin1Char(':'));
@@ -85,8 +85,7 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString(); QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString();
if (gdbServerProvider.isEmpty()) { if (gdbServerProvider.isEmpty()) {
const QString name = displayName(); const QString name = displayName();
if (GdbServerProvider *provider = if (GdbServerProvider *provider = GdbServerProviderManager::findByDisplayName(name)) {
GdbServerProviderManager::instance()->findByDisplayName(name)) {
gdbServerProvider = provider->id(); gdbServerProvider = provider->id();
} else { } else {
const QSsh::SshConnectionParameters sshParams = sshParameters(); const QSsh::SshConnectionParameters sshParams = sshParameters();
@@ -94,7 +93,7 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
newProvider->setDisplayName(name); newProvider->setDisplayName(name);
newProvider->m_host = sshParams.host; newProvider->m_host = sshParams.host;
newProvider->m_port = sshParams.port; newProvider->m_port = sshParams.port;
if (GdbServerProviderManager::instance()->registerProvider(newProvider)) if (GdbServerProviderManager::registerProvider(newProvider))
gdbServerProvider = newProvider->id(); gdbServerProvider = newProvider->id();
else else
delete newProvider; delete newProvider;

View File

@@ -67,6 +67,7 @@ bool BareMetalPlugin::initialize(const QStringList &arguments, QString *errorStr
addAutoReleasedObject(new BareMetalRunControlFactory); addAutoReleasedObject(new BareMetalRunControlFactory);
addAutoReleasedObject(new BareMetalRunConfigurationFactory); addAutoReleasedObject(new BareMetalRunConfigurationFactory);
addAutoReleasedObject(new GdbServerProvidersSettingsPage); addAutoReleasedObject(new GdbServerProvidersSettingsPage);
addAutoReleasedObject(new GdbServerProviderManager);
return true; return true;
} }

View File

@@ -103,8 +103,7 @@ RunControl *BareMetalRunControlFactory::create(
return 0; return 0;
} }
const GdbServerProvider *p = GdbServerProviderManager::instance()->findProvider( const GdbServerProvider *p = GdbServerProviderManager::findProvider(dev->gdbServerProviderId());
dev->gdbServerProviderId());
if (!p) { if (!p) {
*errorMessage = tr("Cannot debug: Device has no GDB server provider configuration."); *errorMessage = tr("Cannot debug: Device has no GDB server provider configuration.");
return 0; return 0;

View File

@@ -175,7 +175,7 @@ bool GdbServerProvider::canStartupMode(StartupMode m) const
void GdbServerProvider::providerUpdated() void GdbServerProvider::providerUpdated()
{ {
GdbServerProviderManager::instance()->notifyAboutUpdate(this); GdbServerProviderManager::notifyAboutUpdate(this);
} }
bool GdbServerProvider::fromMap(const QVariantMap &data) bool GdbServerProvider::fromMap(const QVariantMap &data)

View File

@@ -105,8 +105,7 @@ void GdbServerProviderChooser::populate()
m_chooser->clear(); m_chooser->clear();
m_chooser->addItem(tr("None")); m_chooser->addItem(tr("None"));
foreach (const GdbServerProvider *p, for (const GdbServerProvider *p : GdbServerProviderManager::providers()) {
GdbServerProviderManager::instance()->providers()) {
if (!providerMatches(p)) if (!providerMatches(p))
continue; continue;
m_chooser->addItem(providerText(p), qVariantFromValue(p->id())); m_chooser->addItem(providerText(p), qVariantFromValue(p->id()));

View File

@@ -34,9 +34,10 @@
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include <utils/persistentsettings.h>
#include <utils/qtcassert.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/asconst.h>
#include <utils/qtcassert.h>
#include <utils/persistentsettings.h>
#include <QDir> #include <QDir>
@@ -63,6 +64,7 @@ GdbServerProviderManager::GdbServerProviderManager(QObject *parent)
new OpenOcdGdbServerProviderFactory, new OpenOcdGdbServerProviderFactory,
new StLinkUtilGdbServerProviderFactory}) new StLinkUtilGdbServerProviderFactory})
{ {
m_instance = this;
m_writer = new Utils::PersistentSettingsWriter( m_writer = new Utils::PersistentSettingsWriter(
m_configFile, QLatin1String("QtCreatorGdbServerProviders")); m_configFile, QLatin1String("QtCreatorGdbServerProviders"));
@@ -87,8 +89,6 @@ GdbServerProviderManager::~GdbServerProviderManager()
GdbServerProviderManager *GdbServerProviderManager::instance() GdbServerProviderManager *GdbServerProviderManager::instance()
{ {
if (!m_instance)
m_instance = new GdbServerProviderManager;
return m_instance; return m_instance;
} }
@@ -149,60 +149,61 @@ void GdbServerProviderManager::saveProviders()
m_writer->save(data, Core::ICore::mainWindow()); m_writer->save(data, Core::ICore::mainWindow());
} }
QList<GdbServerProvider *> GdbServerProviderManager::providers() const QList<GdbServerProvider *> GdbServerProviderManager::providers()
{ {
return m_providers; return m_instance->m_providers;
} }
QList<GdbServerProviderFactory *> GdbServerProviderManager::factories() const QList<GdbServerProviderFactory *> GdbServerProviderManager::factories()
{ {
return m_factories; return m_instance->m_factories;
} }
GdbServerProvider *GdbServerProviderManager::findProvider(const QString &id) const GdbServerProvider *GdbServerProviderManager::findProvider(const QString &id)
{ {
if (id.isEmpty()) if (id.isEmpty())
return 0; return 0;
return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::id, id)); return Utils::findOrDefault(m_instance->m_providers, Utils::equal(&GdbServerProvider::id, id));
} }
GdbServerProvider *GdbServerProviderManager::findByDisplayName(const QString &displayName) const GdbServerProvider *GdbServerProviderManager::findByDisplayName(const QString &displayName)
{ {
if (displayName.isEmpty()) if (displayName.isEmpty())
return 0; return 0;
return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::displayName, displayName)); return Utils::findOrDefault(m_instance->m_providers,
Utils::equal(&GdbServerProvider::displayName, displayName));
} }
void GdbServerProviderManager::notifyAboutUpdate(GdbServerProvider *provider) void GdbServerProviderManager::notifyAboutUpdate(GdbServerProvider *provider)
{ {
if (!provider || !m_providers.contains(provider)) if (!provider || !m_instance->m_providers.contains(provider))
return; return;
emit providerUpdated(provider); emit m_instance->providerUpdated(provider);
} }
bool GdbServerProviderManager::registerProvider(GdbServerProvider *provider) bool GdbServerProviderManager::registerProvider(GdbServerProvider *provider)
{ {
if (!provider || m_providers.contains(provider)) if (!provider || m_instance->m_providers.contains(provider))
return true; return true;
foreach (const GdbServerProvider *current, m_providers) { for (const GdbServerProvider *current : Utils::asConst(m_instance->m_providers)) {
if (*provider == *current) if (*provider == *current)
return false; return false;
QTC_ASSERT(current->id() != provider->id(), return false); QTC_ASSERT(current->id() != provider->id(), return false);
} }
m_providers.append(provider); m_instance->m_providers.append(provider);
emit providerAdded(provider); emit m_instance->providerAdded(provider);
return true; return true;
} }
void GdbServerProviderManager::deregisterProvider(GdbServerProvider *provider) void GdbServerProviderManager::deregisterProvider(GdbServerProvider *provider)
{ {
if (!provider || !m_providers.contains(provider)) if (!provider || !m_instance->m_providers.contains(provider))
return; return;
m_providers.removeOne(provider); m_instance->m_providers.removeOne(provider);
emit providerRemoved(provider); emit m_instance->providerRemoved(provider);
delete provider; delete provider;
} }

View File

@@ -47,12 +47,12 @@ public:
static GdbServerProviderManager *instance(); static GdbServerProviderManager *instance();
~GdbServerProviderManager(); ~GdbServerProviderManager();
QList<GdbServerProvider *> providers() const; static QList<GdbServerProvider *> providers();
QList<GdbServerProviderFactory *> factories() const; static QList<GdbServerProviderFactory *> factories();
GdbServerProvider *findProvider(const QString &id) const; static GdbServerProvider *findProvider(const QString &id);
GdbServerProvider *findByDisplayName(const QString &displayName) const; static GdbServerProvider *findByDisplayName(const QString &displayName);
bool registerProvider(GdbServerProvider *); static bool registerProvider(GdbServerProvider *);
void deregisterProvider(GdbServerProvider *); static void deregisterProvider(GdbServerProvider *);
signals: signals:
void providerAdded(GdbServerProvider *); void providerAdded(GdbServerProvider *);
@@ -66,7 +66,7 @@ private:
explicit GdbServerProviderManager(QObject *parent = 0); explicit GdbServerProviderManager(QObject *parent = 0);
void restoreProviders(); void restoreProviders();
void notifyAboutUpdate(GdbServerProvider *); static void notifyAboutUpdate(GdbServerProvider *);
Utils::PersistentSettingsWriter *m_writer; Utils::PersistentSettingsWriter *m_writer;
QList<GdbServerProvider *> m_providers; QList<GdbServerProvider *> m_providers;

View File

@@ -107,7 +107,7 @@ GdbServerProviderModel::GdbServerProviderModel(QObject *parent)
connect(manager, &GdbServerProviderManager::providerRemoved, connect(manager, &GdbServerProviderManager::providerRemoved,
this, &GdbServerProviderModel::removeProvider); this, &GdbServerProviderModel::removeProvider);
foreach (GdbServerProvider *p, manager->providers()) for (GdbServerProvider *p : GdbServerProviderManager::providers())
addProvider(p); addProvider(p);
} }
@@ -131,7 +131,7 @@ void GdbServerProviderModel::apply()
{ {
// Remove unused providers // Remove unused providers
foreach (GdbServerProvider *provider, m_providersToRemove) foreach (GdbServerProvider *provider, m_providersToRemove)
GdbServerProviderManager::instance()->deregisterProvider(provider); GdbServerProviderManager::deregisterProvider(provider);
QTC_ASSERT(m_providersToRemove.isEmpty(), m_providersToRemove.clear()); QTC_ASSERT(m_providersToRemove.isEmpty(), m_providersToRemove.clear());
// Update providers // Update providers
@@ -151,7 +151,7 @@ void GdbServerProviderModel::apply()
// Add new (and already updated) providers // Add new (and already updated) providers
QStringList skippedProviders; QStringList skippedProviders;
foreach (GdbServerProvider *provider, m_providersToAdd) { foreach (GdbServerProvider *provider, m_providersToAdd) {
if (!GdbServerProviderManager::instance()->registerProvider(provider)) if (!GdbServerProviderManager::registerProvider(provider))
skippedProviders << provider->displayName(); skippedProviders << provider->displayName();
} }
@@ -326,7 +326,7 @@ GdbServerProvidersSettingsWidget::GdbServerProvidersSettingsWidget
// Set up add menu: // Set up add menu:
auto addMenu = new QMenu(m_addButton); auto addMenu = new QMenu(m_addButton);
foreach (const auto f, GdbServerProviderManager::instance()->factories()) { for (const auto f : GdbServerProviderManager::factories()) {
auto action = new QAction(addMenu); auto action = new QAction(addMenu);
action->setText(f->displayName()); action->setText(f->displayName());
connect(action, &QAction::triggered, this, [this, f] { createProvider(f); }); connect(action, &QAction::triggered, this, [this, f] { createProvider(f); });