ProjectTree: Fix soft assert

Fix soft assert when accessing the lone project file node in a project
that failed to parse.

Change-Id: I73d9b0012292dd5516a0a9c81cdc4003eebf2a92
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-10-15 20:46:47 +02:00
parent 3d0339844e
commit 95bd5b0d68
3 changed files with 10 additions and 0 deletions

View File

@@ -210,6 +210,7 @@ void FlatModel::addOrRebuildProjectModel(Project *project)
WrapperNode *container = nodeForProject(project); WrapperNode *container = nodeForProject(project);
if (container) { if (container) {
container->removeChildren(); container->removeChildren();
project->containerNode()->removeAllChildren();
} else { } else {
container = new WrapperNode(project->containerNode()); container = new WrapperNode(project->containerNode());
rootItem()->insertOrderedChild(container, &compareProjectNames); rootItem()->insertOrderedChild(container, &compareProjectNames);
@@ -224,6 +225,7 @@ void FlatModel::addOrRebuildProjectModel(Project *project)
} }
if (container->childCount() == 0) { if (container->childCount() == 0) {
FileNode *projectFileNode = new FileNode(project->projectFilePath(), FileType::Project, false); FileNode *projectFileNode = new FileNode(project->projectFilePath(), FileType::Project, false);
project->containerNode()->addNestedNode(projectFileNode);
seen.insert(projectFileNode); seen.insert(projectFileNode);
container->appendChild(new WrapperNode(projectFileNode)); container->appendChild(new WrapperNode(projectFileNode));
} }

View File

@@ -908,4 +908,10 @@ ProjectNode *ContainerNode::rootProjectNode() const
return m_project->rootProjectNode(); return m_project->rootProjectNode();
} }
void ContainerNode::removeAllChildren()
{
qDeleteAll(m_nodes);
m_nodes.clear();
}
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -358,6 +358,8 @@ public:
ProjectNode *rootProjectNode() const; ProjectNode *rootProjectNode() const;
Project *project() const { return m_project; } Project *project() const { return m_project; }
void removeAllChildren();
private: private:
Project *m_project; Project *m_project;
}; };