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());
|
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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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); });
|
||||||
|
|||||||
Reference in New Issue
Block a user