forked from qt-creator/qt-creator
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user