forked from qt-creator/qt-creator
Load .pro files with infinite loops
Task-Nr: QTCREATORBUG-1443
This commit is contained in:
@@ -313,8 +313,8 @@ void ProjectNode::addProjectNodes(const QList<ProjectNode*> &subProjects)
|
|||||||
emit watcher->foldersAboutToBeAdded(this, folderNodes);
|
emit watcher->foldersAboutToBeAdded(this, folderNodes);
|
||||||
|
|
||||||
foreach (ProjectNode *project, subProjects) {
|
foreach (ProjectNode *project, subProjects) {
|
||||||
QTC_ASSERT(!project->parentFolderNode(),
|
QTC_ASSERT(!project->parentFolderNode() || project->parentFolderNode() == this,
|
||||||
qDebug("Project node has already a parent"));
|
qDebug("Project node has already a parent"));
|
||||||
project->setParentFolderNode(this);
|
project->setParentFolderNode(this);
|
||||||
foreach (NodesWatcher *watcher, m_watchers)
|
foreach (NodesWatcher *watcher, m_watchers)
|
||||||
project->registerWatcher(watcher);
|
project->registerWatcher(watcher);
|
||||||
|
|||||||
@@ -1177,16 +1177,31 @@ void Qt4ProFileNode::applyEvaluate(bool parseResult, bool async)
|
|||||||
// newCumalativeIt and newExactIt are already incremented
|
// 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()) {
|
if (!nodeToAdd.isEmpty()) {
|
||||||
ProFile *fileExact = includeFilesCumlative.value(nodeToAdd);
|
ProFile *fileExact = includeFilesCumlative.value(nodeToAdd);
|
||||||
ProFile *fileCumlative = 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<Qt4PriFileNode *>(n) && n->path() == nodeToAdd) {
|
||||||
|
loop = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loop) {
|
||||||
|
// Do nothing
|
||||||
|
} else if (fileExact || fileCumlative) {
|
||||||
Qt4PriFileNode *qt4PriFileNode = new Qt4PriFileNode(m_project, this, nodeToAdd);
|
Qt4PriFileNode *qt4PriFileNode = new Qt4PriFileNode(m_project, this, nodeToAdd);
|
||||||
|
qt4PriFileNode->setParentFolderNode(this); // Needed for loop detection
|
||||||
qt4PriFileNode->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative);
|
qt4PriFileNode->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative);
|
||||||
toAdd << qt4PriFileNode;
|
toAdd << qt4PriFileNode;
|
||||||
} else {
|
} else {
|
||||||
Qt4ProFileNode *qt4ProFileNode = new Qt4ProFileNode(m_project, nodeToAdd);
|
Qt4ProFileNode *qt4ProFileNode = new Qt4ProFileNode(m_project, nodeToAdd);
|
||||||
|
qt4ProFileNode->setParentFolderNode(this); // Needed for loop detection
|
||||||
if (async)
|
if (async)
|
||||||
qt4ProFileNode->asyncUpdate();
|
qt4ProFileNode->asyncUpdate();
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user