diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index d9cd9b11a1a..04ad8450367 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -313,8 +313,8 @@ void ProjectNode::addProjectNodes(const QList &subProjects) emit watcher->foldersAboutToBeAdded(this, folderNodes); foreach (ProjectNode *project, subProjects) { - QTC_ASSERT(!project->parentFolderNode(), - qDebug("Project node has already a parent")); + QTC_ASSERT(!project->parentFolderNode() || project->parentFolderNode() == this, + qDebug("Project node has already a parent")); project->setParentFolderNode(this); foreach (NodesWatcher *watcher, m_watchers) project->registerWatcher(watcher); diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 5e76e570814..9c798ef195e 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1177,16 +1177,31 @@ void Qt4ProFileNode::applyEvaluate(bool parseResult, bool async) // newCumalativeIt and newExactIt are already incremented } - // If we found something to add do it + // If we found something to add, do it if (!nodeToAdd.isEmpty()) { ProFile *fileExact = includeFilesCumlative.value(nodeToAdd); ProFile *fileCumlative = includeFilesCumlative.value(nodeToAdd); - if (fileExact || fileCumlative) { + + // Loop preventation, make sure that exact same node is not in our parent chain + bool loop = false; + ProjectExplorer::Node *n = this; + while ((n = n->parentFolderNode())) { + if (qobject_cast(n) && n->path() == nodeToAdd) { + loop = true; + break; + } + } + + if (loop) { + // Do nothing + } else if (fileExact || fileCumlative) { Qt4PriFileNode *qt4PriFileNode = new Qt4PriFileNode(m_project, this, nodeToAdd); + qt4PriFileNode->setParentFolderNode(this); // Needed for loop detection qt4PriFileNode->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative); toAdd << qt4PriFileNode; } else { Qt4ProFileNode *qt4ProFileNode = new Qt4ProFileNode(m_project, nodeToAdd); + qt4ProFileNode->setParentFolderNode(this); // Needed for loop detection if (async) qt4ProFileNode->asyncUpdate(); else