From 314bc49144c353c59b040d389a51e2bfa986551a Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Fri, 19 Apr 2013 13:19:41 +0200
Subject: [PATCH] Revert "Qbs: Remove implicit Group with the same name as the
 Product"

This got applied in the wrong sequence.

This reverts commit 850e3eda14e41884c53932b67dffd573c2616c43

Change-Id: I604ba711e63cf207af6bca6110320632ec3cb72a
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/qbsprojectmanager/qbsnodes.cpp | 63 ++++++++--------------
 src/plugins/qbsprojectmanager/qbsnodes.h   | 14 ++---
 2 files changed, 26 insertions(+), 51 deletions(-)

diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index b363286bf59..5a3f93a81f9 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -285,11 +285,10 @@ void QbsGroupNode::setGroup(const qbs::GroupData *group, const QString &productP
 
     m_productPath = productPath;
 
-    // Set Product file node used to jump to the product
     setPath(group->location().fileName);
     setDisplayName(group->name());
 
-    // set up file node...
+    // Set Product file node used to jump to the product
     QbsFileNode *indexFile = 0;
     if (!m_group) {
         indexFile = new QbsFileNode(group->location().fileName,
@@ -303,15 +302,6 @@ void QbsGroupNode::setGroup(const qbs::GroupData *group, const QString &productP
         indexFile->emitNodeUpdated();
     }
 
-    m_group = group;
-
-    setGroup(this, group, productPath, QList<ProjectExplorer::Node *>() << indexFile);
-    emitNodeUpdated();
-}
-
-void QbsGroupNode::setGroup(QbsBaseProjectNode *root, const qbs::GroupData *group,
-                            const QString &productPath, QList<ProjectExplorer::Node *> keepers)
-{
     // Build up a tree of nodes:
     FileTreeNode *tree = new FileTreeNode(QString());
 
@@ -325,13 +315,16 @@ void QbsGroupNode::setGroup(QbsBaseProjectNode *root, const qbs::GroupData *grou
 
     FileTreeNode::reorder(tree, productPath, tree);
     FileTreeNode::simplify(tree);
-    setupFolders(root, root, tree, productPath, keepers);
+    setupFolders(this, tree, productPath, QList<ProjectExplorer::Node *>() << indexFile);
+
     delete tree;
+
+    m_group = group;
+    emitNodeUpdated();
 }
 
-void QbsGroupNode::setupFolders(QbsBaseProjectNode *topLevel, ProjectExplorer::FolderNode *root,
-                                FileTreeNode *node, const QString &baseDirPath,
-                                QList<ProjectExplorer::Node *> keepers)
+void QbsGroupNode::setupFolders(ProjectExplorer::FolderNode *root, FileTreeNode *node,
+                                const QString &baseDirPath, QList<ProjectExplorer::Node *> keepers)
 {
     QList<ProjectExplorer::FileNode *> filesToRemove;
     foreach (ProjectExplorer::FileNode *fn, root->fileNodes()) {
@@ -367,7 +360,7 @@ void QbsGroupNode::setupFolders(QbsBaseProjectNode *topLevel, ProjectExplorer::F
 
         ProjectExplorer::FolderNode *fn = root->findSubFolder(path);
         if (path == baseDirPath) {
-            setupFolders(topLevel, root, c, c->path(), foldersToKeep);
+            setupFolders(root, c, c->path(), foldersToKeep);
             continue;
         }
 
@@ -379,14 +372,14 @@ void QbsGroupNode::setupFolders(QbsBaseProjectNode *topLevel, ProjectExplorer::F
             foldersToRemove.removeOne(fn);
         } else {
             fn = new ProjectExplorer::FolderNode(path);
-            topLevel->addFolderNodes(QList<ProjectExplorer::FolderNode *>() << fn, root);
+            addFolderNodes(QList<ProjectExplorer::FolderNode *>() << fn, root);
         }
         foldersToKeep.append(fn);
-        setupFolders(topLevel, fn, c, c->path());
+        setupFolders(fn, c, c->path());
     }
-    topLevel->removeFileNodes(filesToRemove, root);
-    topLevel->removeFolderNodes(foldersToRemove, root);
-    topLevel->addFileNodes(filesToAdd, root);
+    addFileNodes(filesToAdd, root);
+    removeFileNodes(filesToRemove, root);
+    removeFolderNodes(foldersToRemove, root);
 }
 
 // --------------------------------------------------------------------
@@ -417,38 +410,28 @@ void QbsProductNode::setProduct(const qbs::ProductData *prd)
 
     // Set Product file node used to jump to the product
     QList<ProjectExplorer::FileNode *> files = fileNodes();
-    QList<ProjectExplorer::Node *> toKeep;
     if (files.isEmpty()) {
-        QbsFileNode *idx = new QbsFileNode(prd->location().fileName,
-                                                         ProjectExplorer::ProjectFileType, false,
-                                                         prd->location().line);
-        addFileNodes(QList<ProjectExplorer::FileNode *>() << idx, this);
-        toKeep.append(idx);
+        addFileNodes(QList<ProjectExplorer::FileNode *>()
+                     << new QbsFileNode(prd->location().fileName,
+                                        ProjectExplorer::ProjectFileType, false,
+                                        prd->location().line),
+                     this);
     } else {
-        QbsFileNode *idx = static_cast<QbsFileNode *>(files.at(0));
-        idx->setPath(prd->location().fileName);
-        idx->setLine(prd->location().line);
-        toKeep.append(idx);
+        QbsFileNode *qbsFile = static_cast<QbsFileNode *>(files.at(0));
+        qbsFile->setPath(prd->location().fileName);
+        qbsFile->setLine(prd->location().line);
     }
 
     QList<ProjectExplorer::ProjectNode *> toAdd;
     QList<ProjectExplorer::ProjectNode *> toRemove = subProjectNodes();
 
     foreach (const qbs::GroupData &grp, prd->groups()) {
-        if (grp.name() == prd->name() && grp.location() == prd->location()) {
-            // Set implicit product group right onto this node:
-            QbsGroupNode::setGroup(this, &grp, productPath, toKeep);
-            continue;
-        }
         QbsGroupNode *qn = findGroupNode(grp.name());
         if (qn) {
             toRemove.removeAll(qn);
-            toKeep.append(qn);
             qn->setGroup(&grp, productPath);
         } else {
-            qn = new QbsGroupNode(&grp, productPath);
-            toAdd.append(qn);
-            toKeep.append(qn);
+            toAdd << new QbsGroupNode(&grp, productPath);
         }
     }
 
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index 76135f88fb6..88e06e8f5be 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -68,8 +68,6 @@ private:
 
 class QbsGroupNode;
 
-class QbsGroupNode;
-
 class QbsBaseProjectNode : public ProjectExplorer::ProjectNode
 {
     Q_OBJECT
@@ -100,9 +98,6 @@ public:
                      const QString &newFilePath);
 
     QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node);
-
-private:
-    friend class QbsGroupNode;
 };
 
 // --------------------------------------------------------------------
@@ -122,13 +117,10 @@ public:
 
     QString productPath() const;
 
-    static void setGroup(QbsBaseProjectNode *root, const qbs::GroupData *group,
-                         const QString &productPath, QList<Node *> keepers);
-
 private:
-    static void setupFolders(QbsBaseProjectNode *topLevel, FolderNode *root, FileTreeNode *node,
-                             const QString &baseDirPath,
-                             QList<ProjectExplorer::Node *> keepers = QList<ProjectExplorer::Node *>());
+    void setupFolders(ProjectExplorer::FolderNode *root, FileTreeNode *node,
+                      const QString &baseDirPath,
+                      QList<ProjectExplorer::Node *> keepers = QList<ProjectExplorer::Node *>());
 
     const qbs::GroupData *m_group;
     QString m_productPath;
-- 
GitLab