DebuggerItem: Make sure DebuggerItems have an Id

The default constructor now sets an id on debuggerItem. fromMap was
removed and a new constructor (taking a const QVariantMap &) was
added in place of that.

There are no more friends on the DebuggerItem class since those were
only necessary to make sure the item has an Id when it gets added.

Change-Id: Ia1a6c9ffea67a8e0a1e5685ef93f67df8686d4c9
Reviewed-by: hjk <hjk121@nokiamail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Tobias Hunger
2013-10-25 12:18:36 +02:00
parent 1567f4729f
commit c2705f1595
3 changed files with 24 additions and 36 deletions

View File

@@ -387,8 +387,7 @@ static void readDebuggers(const FileName &fileName, bool isSystem)
if (!data.contains(key)) if (!data.contains(key))
continue; continue;
const QVariantMap dbMap = data.value(key).toMap(); const QVariantMap dbMap = data.value(key).toMap();
DebuggerItem item; DebuggerItem item(dbMap);
item.fromMap(dbMap);
if (isSystem) { if (isSystem) {
item.setAutoDetected(true); item.setAutoDetected(true);
// SDK debuggers are always considered to be up-to-date, so no need to recheck them. // SDK debuggers are always considered to be up-to-date, so no need to recheck them.
@@ -660,14 +659,12 @@ void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item)
removeDebugger(item.id()); removeDebugger(item.id());
} }
QVariant DebuggerItemManager::addDebugger(const DebuggerItem& item0) QVariant DebuggerItemManager::addDebugger(const DebuggerItem &item)
{ {
DebuggerItem item = item0;
QTC_ASSERT(!item.command().isEmpty(), return QVariant()); QTC_ASSERT(!item.command().isEmpty(), return QVariant());
QTC_ASSERT(!item.displayName().isEmpty(), return QVariant()); QTC_ASSERT(!item.displayName().isEmpty(), return QVariant());
QTC_ASSERT(item.engineType() != NoEngineType, return QVariant()); QTC_ASSERT(item.engineType() != NoEngineType, return QVariant());
if (item.id().isNull()) QTC_ASSERT(item.id().isValid(), return QVariant());
item.setId(QUuid::createUuid().toString());
m_debuggers.append(item); m_debuggers.append(item);
m_model->addDebugger(item); m_model->addDebugger(item);
return item.id(); return item.id();
@@ -821,11 +818,9 @@ void DebuggerItemModel::markCurrentDirty()
sitem->setFont(font); sitem->setFont(font);
} }
void DebuggerItemModel::addDebugger(const DebuggerItem &item0) void DebuggerItemModel::addDebugger(const DebuggerItem &item)
{ {
DebuggerItem item = item0; QTC_ASSERT(item.id().isValid(), return);
if (item.id().isNull())
item.setId(QUuid::createUuid().toString());
QList<QStandardItem *> row = describeItem(item); QList<QStandardItem *> row = describeItem(item);
(item.isAutoDetected() ? m_autoRoot : m_manualRoot)->appendRow(row); (item.isAutoDetected() ? m_autoRoot : m_manualRoot)->appendRow(row);
emit debuggerAdded(item.id(), item.displayName()); emit debuggerAdded(item.id(), item.displayName());

View File

@@ -34,6 +34,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <QProcess> #include <QProcess>
#include <QUuid>
using namespace Debugger::Internal; using namespace Debugger::Internal;
using namespace ProjectExplorer; using namespace ProjectExplorer;
@@ -54,10 +55,27 @@ namespace Debugger {
DebuggerItem::DebuggerItem() DebuggerItem::DebuggerItem()
{ {
m_id = QUuid::createUuid().toString();
m_engineType = NoEngineType; m_engineType = NoEngineType;
m_isAutoDetected = false; m_isAutoDetected = false;
} }
DebuggerItem::DebuggerItem(const QVariantMap &data)
{
m_command = FileName::fromUserInput(data.value(QLatin1String(DEBUGGER_INFORMATION_COMMAND)).toString());
m_id = data.value(QLatin1String(DEBUGGER_INFORMATION_ID)).toString();
m_displayName = data.value(QLatin1String(DEBUGGER_INFORMATION_DISPLAYNAME)).toString();
m_isAutoDetected = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED), false).toBool();
m_engineType = DebuggerEngineType(data.value(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE),
static_cast<int>(NoEngineType)).toInt());
foreach (const QString &a, data.value(QLatin1String(DEBUGGER_INFORMATION_ABIS)).toStringList()) {
Abi abi(a);
if (abi.isValid())
m_abis.append(abi);
}
}
void DebuggerItem::reinitializeFromFile() void DebuggerItem::reinitializeFromFile()
{ {
QProcess proc; QProcess proc;
@@ -133,27 +151,6 @@ QVariantMap DebuggerItem::toMap() const
return data; return data;
} }
void DebuggerItem::fromMap(const QVariantMap &data)
{
m_command = FileName::fromUserInput(data.value(QLatin1String(DEBUGGER_INFORMATION_COMMAND)).toString());
m_id = data.value(QLatin1String(DEBUGGER_INFORMATION_ID)).toString();
m_displayName = data.value(QLatin1String(DEBUGGER_INFORMATION_DISPLAYNAME)).toString();
m_isAutoDetected = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED)).toBool();
m_engineType = DebuggerEngineType(data.value(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE)).toInt());
m_abis.clear();
foreach (const QString &a, data.value(QLatin1String(DEBUGGER_INFORMATION_ABIS)).toStringList()) {
Abi abi(a);
if (abi.isValid())
m_abis.append(abi);
}
}
void DebuggerItem::setId(const QVariant &id)
{
m_id = id;
}
void DebuggerItem::setDisplayName(const QString &displayName) void DebuggerItem::setDisplayName(const QString &displayName)
{ {
m_displayName = displayName; m_displayName = displayName;

View File

@@ -50,13 +50,13 @@ class DEBUGGER_EXPORT DebuggerItem
{ {
public: public:
DebuggerItem(); DebuggerItem();
DebuggerItem(const QVariantMap &data);
bool canClone() const { return true; } bool canClone() const { return true; }
bool isValid() const; bool isValid() const;
QString engineTypeName() const; QString engineTypeName() const;
QVariantMap toMap() const; QVariantMap toMap() const;
void fromMap(const QVariantMap &data);
void reinitializeFromFile(); void reinitializeFromFile();
QVariant id() const { return m_id; } QVariant id() const { return m_id; }
@@ -83,10 +83,6 @@ public:
QStringList abiNames() const; QStringList abiNames() const;
private: private:
friend class Debugger::Internal::DebuggerItemModel;
friend class DebuggerItemManager;
void setId(const QVariant &id);
QVariant m_id; QVariant m_id;
QString m_displayName; QString m_displayName;
DebuggerEngineType m_engineType; DebuggerEngineType m_engineType;