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());
QTC_ASSERT(dev, return);
const GdbServerProvider *p = GdbServerProviderManager::instance()->findProvider(
dev->gdbServerProviderId());
const GdbServerProvider *p = GdbServerProviderManager::findProvider(dev->gdbServerProviderId());
QTC_ASSERT(p, return);
m_state = StartingRunner;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -34,9 +34,10 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/persistentsettings.h>
#include <utils/qtcassert.h>
#include <utils/algorithm.h>
#include <utils/asconst.h>
#include <utils/qtcassert.h>
#include <utils/persistentsettings.h>
#include <QDir>
@@ -63,6 +64,7 @@ GdbServerProviderManager::GdbServerProviderManager(QObject *parent)
new OpenOcdGdbServerProviderFactory,
new StLinkUtilGdbServerProviderFactory})
{
m_instance = this;
m_writer = new Utils::PersistentSettingsWriter(
m_configFile, QLatin1String("QtCreatorGdbServerProviders"));
@@ -87,8 +89,6 @@ GdbServerProviderManager::~GdbServerProviderManager()
GdbServerProviderManager *GdbServerProviderManager::instance()
{
if (!m_instance)
m_instance = new GdbServerProviderManager;
return m_instance;
}
@@ -149,60 +149,61 @@ void GdbServerProviderManager::saveProviders()
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())
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())
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)
{
if (!provider || !m_providers.contains(provider))
if (!provider || !m_instance->m_providers.contains(provider))
return;
emit providerUpdated(provider);
emit m_instance->providerUpdated(provider);
}
bool GdbServerProviderManager::registerProvider(GdbServerProvider *provider)
{
if (!provider || m_providers.contains(provider))
if (!provider || m_instance->m_providers.contains(provider))
return true;
foreach (const GdbServerProvider *current, m_providers) {
for (const GdbServerProvider *current : Utils::asConst(m_instance->m_providers)) {
if (*provider == *current)
return false;
QTC_ASSERT(current->id() != provider->id(), return false);
}
m_providers.append(provider);
emit providerAdded(provider);
m_instance->m_providers.append(provider);
emit m_instance->providerAdded(provider);
return true;
}
void GdbServerProviderManager::deregisterProvider(GdbServerProvider *provider)
{
if (!provider || !m_providers.contains(provider))
if (!provider || !m_instance->m_providers.contains(provider))
return;
m_providers.removeOne(provider);
emit providerRemoved(provider);
m_instance->m_providers.removeOne(provider);
emit m_instance->providerRemoved(provider);
delete provider;
}

View File

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

View File

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