From a63998f55b28575818faabd1a16d0c40b0433c23 Mon Sep 17 00:00:00 2001
From: hjk <hjk@qt.io>
Date: Fri, 24 Mar 2017 11:52:45 +0100
Subject: [PATCH] ProjectExplorer: Avoid some needless intermediate lists

... when creating folder nodes in the flat model.

Change-Id: I28f95589d774fc83e1a30c8328707bd1db6be03e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
(cherry picked from commit 1a416d3f982d1fc574c578fdd6bafce51714f8a3)
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
---
 src/plugins/projectexplorer/projectmodels.cpp | 32 ++++++++++---------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp
index b8e925230f..4f4e69f180 100644
--- a/src/plugins/projectexplorer/projectmodels.cpp
+++ b/src/plugins/projectexplorer/projectmodels.cpp
@@ -264,23 +264,25 @@ void FlatModel::saveExpandData()
 
 void FlatModel::addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet<Node *> *seen)
 {
-    const QList<FolderNode *> subFolderNodes = folderNode->folderNodes();
-    for (FolderNode *subFolderNode : subFolderNodes) {
-        if (!filter(subFolderNode) && !seen->contains(subFolderNode)) {
-            seen->insert(subFolderNode);
-            auto node = new WrapperNode(subFolderNode);
-            parent->appendChild(node);
-            addFolderNode(node, subFolderNode, seen);
-            node->sortChildren(&sortWrapperNodes);
-        } else {
-            addFolderNode(parent, subFolderNode, seen);
+    for (Node *node : folderNode->nodes()) {
+        if (FolderNode *subFolderNode = node->asFolderNode()) {
+            if (!filter(subFolderNode) && !seen->contains(subFolderNode)) {
+                seen->insert(subFolderNode);
+                auto node = new WrapperNode(subFolderNode);
+                parent->appendChild(node);
+                addFolderNode(node, subFolderNode, seen);
+                node->sortChildren(&sortWrapperNodes);
+            } else {
+                addFolderNode(parent, subFolderNode, seen);
+            }
         }
     }
-    const QList<FileNode *> fileNodes = folderNode->fileNodes();
-    for (FileNode *fileNode : fileNodes) {
-        if (!filter(fileNode) && !seen->contains(fileNode)) {
-            seen->insert(fileNode);
-            parent->appendChild(new WrapperNode(fileNode));
+    for (Node *node : folderNode->nodes()) {
+        if (FileNode *fileNode = node->asFileNode()) {
+            if (!filter(fileNode) && !seen->contains(fileNode)) {
+                seen->insert(fileNode);
+                parent->appendChild(new WrapperNode(fileNode));
+            }
         }
     }
 }
-- 
GitLab