From c14896b7d29b701cd653625df09cd4be2597d638 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Fri, 5 Dec 2008 15:58:19 +0100
Subject: [PATCH] Slight optimization in Session::projectForFile

Avoid creating a copy of the list of projects.
---
 src/plugins/cpptools/searchsymbols.cpp  |  2 +-
 src/plugins/projectexplorer/session.cpp | 36 ++++++++++++-------------
 src/plugins/projectexplorer/session.h   |  3 ++-
 3 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/plugins/cpptools/searchsymbols.cpp b/src/plugins/cpptools/searchsymbols.cpp
index 670d0d6d471..308449ab581 100644
--- a/src/plugins/cpptools/searchsymbols.cpp
+++ b/src/plugins/cpptools/searchsymbols.cpp
@@ -194,7 +194,7 @@ QString SearchSymbols::symbolName(const Symbol *symbol) const
 void SearchSymbols::appendItem(const QString &name,
                                const QString &info,
                                ModelItemInfo::ItemType type,
-                               const CPlusPlus::Symbol *symbol)
+                               const Symbol *symbol)
 {
     const QIcon icon = icons.iconForSymbol(symbol);
     items.append(ModelItemInfo(name, info, type,
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 876b8294a37..71057473046 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -709,7 +709,7 @@ void SessionManager::editDependencies()
     dlg.exec();
 }
 
-QList<Project *> SessionManager::projects() const
+const QList<Project *> &SessionManager::projects() const
 {
     return m_file->m_projects;
 }
@@ -839,26 +839,26 @@ Project *SessionManager::projectForFile(const QString &fileName) const
     if (debug)
         qDebug() << "SessionManager::projectForFile(" << fileName << ")";
 
-    Project *project = 0;
+    const QList<Project *> &projectList = projects();
 
-    QList<Project *> projectList = projects();
+    // Check current project first
+    Project *currentProject = ProjectExplorerPlugin::instance()->currentProject();
+    if (currentProject && projectContainsFile(currentProject, fileName))
+        return currentProject;
 
-    // Always check current project first
-    if (Project *currentProject = ProjectExplorerPlugin::instance()->currentProject()) {
-        projectList.removeOne(currentProject);
-        projectList.insert(0, currentProject);
-    }
+    foreach (Project *p, projectList)
+        if (p != currentProject && projectContainsFile(p, fileName))
+            return p;
 
-    foreach (Project *p, projectList) {
-        if (!m_projectFileCache.contains(p)) {
-            m_projectFileCache.insert(p, p->files(Project::AllFiles));
-        }
-        if (m_projectFileCache.value(p).contains(fileName)) {
-            project = p;
-            break;
-        }
-    }
-    return project;
+    return 0;
+}
+
+bool SessionManager::projectContainsFile(Project *p, const QString &fileName) const
+{
+    if (!m_projectFileCache.contains(p))
+        m_projectFileCache.insert(p, p->files(Project::AllFiles));
+
+    return m_projectFileCache.value(p).contains(fileName);
 }
 
 void SessionManager::setEditorCodec(Core::IEditor *editor, const QString &fileName)
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index fcf98a23ded..d07316f07a4 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -137,7 +137,7 @@ public:
     Core::IFile *file() const;
     Project *startupProject() const;
 
-    QList<Project *> projects() const;
+    const QList<Project *> &projects() const;
 
     bool isDefaultVirgin() const;
     bool isDefaultSession(const QString &session) const;
@@ -182,6 +182,7 @@ private:
     bool loadImpl(const QString &fileName);
     bool createImpl(const QString &fileName);
     QString sessionNameToFileName(const QString &session);
+    bool projectContainsFile(Project *p, const QString &fileName) const;
 
     bool recursiveDependencyCheck(const QString &newDep, const QString &checkDep) const;
     QStringList dependencies(const QString &proName) const;
-- 
GitLab