forked from qt-creator/qt-creator
BareMetal: Apply "static" pattern to GdbServerProviderManager
Change-Id: I7fe76b5912808ac0855ef09cd6d31afdf9225f6f Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
committed by
Orgad Shaneh
parent
db6c85cdc9
commit
d9a66a5406
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); });
|
||||
|
||||
Reference in New Issue
Block a user