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