TreeModel: Add a few more soft asserts

This establishes an additional invariant, namely that items
that are not part of a model have m_model == 0, even if their
destruction is imminent.

Change-Id: I0bad7fff57d21ddcefe06953cd0da8c2897baa4a
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
hjk
2015-06-16 15:07:08 +02:00
parent 9553309a7f
commit 8c583cb382

View File

@@ -622,6 +622,8 @@ TreeItem::TreeItem(const QStringList &displays, int flags)
TreeItem::~TreeItem()
{
QTC_CHECK(m_parent == 0);
QTC_CHECK(m_model == 0);
removeChildren();
delete m_displays;
}
@@ -851,6 +853,10 @@ TreeModel::TreeModel(TreeItem *root, QObject *parent)
TreeModel::~TreeModel()
{
QTC_ASSERT(m_root, return);
QTC_ASSERT(m_root->m_parent == 0, return);
QTC_ASSERT(m_root->m_model == this, return);
m_root->m_model = 0;
delete m_root;
}
@@ -966,7 +972,13 @@ int TreeModel::topLevelItemCount() const
void TreeModel::setRootItem(TreeItem *item)
{
delete m_root;
QTC_CHECK(m_root);
if (m_root) {
QTC_CHECK(m_root->m_parent == 0);
QTC_CHECK(m_root->m_model == this);
m_root->m_model = 0;
delete m_root;
}
m_root = item;
item->setModel(this);
emit layoutChanged();
@@ -1049,6 +1061,7 @@ TreeItem *TreeModel::takeItem(TreeItem *item)
QModelIndex idx = indexForItem(parent);
beginRemoveRows(idx, pos, pos);
item->m_parent = 0;
item->m_model = 0;
parent->m_children.removeAt(pos);
endRemoveRows();
return item;