aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/session.cpp')
-rw-r--r--src/plugins/projectexplorer/session.cpp121
1 files changed, 32 insertions, 89 deletions
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 2e87aef4ff..9286155bfb 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -92,13 +92,7 @@ public:
static QString sessionTitle(const QString &filePath);
bool hasProjects() const { return !m_projects.isEmpty(); }
- bool hasProject(Project *p) const
- {
- return Utils::contains(m_projects,
- [p](const QPair<Project *, ProjectNode *> &pair) { return pair.first == p; });
- }
- SessionNode m_sessionNode;
QString m_sessionName = QLatin1String("default");
bool m_virginSession = true;
bool m_loadingSession = false;
@@ -110,7 +104,7 @@ public:
mutable QHash<Project *, QStringList> m_projectFileCache;
Project *m_startupProject = nullptr;
- QList<QPair<Project *,ProjectNode*>> m_projects;
+ QList<Project *> m_projects;
QStringList m_failedProjects;
QMap<QString, QStringList> m_depMap;
QMap<QString, QVariant> m_values;
@@ -188,36 +182,6 @@ void SessionManager::clearProjectFileCache()
d->m_projectFileCache.clear();
}
-void SessionManager::updateProjectTree(Project *pro)
-{
- if (!pro)
- return;
-
- QPair<Project *, ProjectNode *> *currentPair = nullptr;
- for (QPair<Project *, ProjectNode *> &pair : d->m_projects) {
- if (pair.first == pro) {
- currentPair = &pair;
- break;
- }
- }
-
- if (!currentPair)
- return; // Project was already de-registered and is shutting down
-
- ProjectNode *const oldNode = currentPair->second;
- ProjectNode *newNode = pro->rootProjectNode();
-
- if (!newNode) {
- // Set up generic project structure if the project does not provide any!
- newNode = new ProjectNode(pro->projectDirectory());
- newNode->setDisplayName(pro->displayName());
- newNode->addNode(new FileNode(pro->projectFilePath(), FileType::Project, false));
- }
-
- d->m_sessionNode.replaceSubtree(oldNode, newNode);
- currentPair->second = newNode;
-}
-
bool SessionManagerPrivate::recursiveDependencyCheck(const QString &newDep, const QString &checkDep) const
{
if (newDep == checkDep)
@@ -393,8 +357,8 @@ void SessionManager::setActiveDeployConfiguration(Target *target, DeployConfigur
void SessionManager::setStartupProject(Project *startupProject)
{
- QTC_ASSERT((!startupProject)
- || (startupProject && hasProject(startupProject)), return);
+ QTC_ASSERT(!startupProject
+ || (startupProject && d->m_projects.contains(startupProject)), return);
if (d->m_startupProject == startupProject)
return;
@@ -413,13 +377,11 @@ void SessionManager::addProject(Project *pro)
QTC_ASSERT(pro, return);
d->m_virginSession = false;
- QTC_ASSERT(!hasProject(pro), return);
+ QTC_ASSERT(!d->m_projects.contains(pro), return);
- d->m_projects.append(qMakePair(pro, nullptr));
- m_instance->updateProjectTree(pro);
+ d->m_projects.append(pro);
connect(pro, &Project::fileListChanged, m_instance, &SessionManager::clearProjectFileCache);
- connect(pro, &Project::projectTreeChanged, m_instance, &SessionManager::updateProjectTree);
emit m_instance->projectAdded(pro);
configureEditors(pro);
@@ -522,8 +484,7 @@ void SessionManager::closeAllProjects()
const QList<Project *> SessionManager::projects()
{
- return Utils::transform(d->m_projects,
- [](const QPair<Project *, ProjectNode *> &pair) { return pair.first; });
+ return d->m_projects;
}
bool SessionManager::hasProjects()
@@ -533,7 +494,7 @@ bool SessionManager::hasProjects()
bool SessionManager::hasProject(Project *p)
{
- return d->hasProject(p);
+ return d->m_projects.contains(p);
}
QStringList SessionManagerPrivate::dependencies(const QString &proName) const
@@ -604,8 +565,8 @@ QStringList SessionManagerPrivate::dependenciesOrder() const
QStringList ordered;
// copy the map to a temporary list
- for (const QPair<Project *, ProjectNode *> &pro : m_projects) {
- const QString proName = pro.first->projectFilePath().toString();
+ for (const Project *pro : m_projects) {
+ const QString proName = pro->projectFilePath().toString();
unordered << QPair<QString, QStringList>(proName, m_depMap.value(proName));
}
@@ -658,13 +619,17 @@ QList<Project *> SessionManager::projectOrder(const Project *project)
Node *SessionManager::nodeForFile(const Utils::FileName &fileName)
{
Node *node = nullptr;
- sessionNode()->forEachGenericNode([&](Node *n) {
- if (n->filePath() == fileName) {
- // prefer file nodes
- if (!node || (node->nodeType() != NodeType::File && n->nodeType() == NodeType::File))
- node = n;
+ for (Project *project : d->m_projects) {
+ if (ProjectNode *projectNode = project->rootProjectNode()) {
+ projectNode->forEachGenericNode([&](Node *n) {
+ if (n->filePath() == fileName) {
+ // prefer file nodes
+ if (!node || (node->nodeType() != NodeType::File && n->nodeType() == NodeType::File))
+ node = n;
+ }
+ });
}
- });
+ }
return node;
}
@@ -673,25 +638,16 @@ Project *SessionManager::projectForNode(Node *node)
if (!node)
return nullptr;
- FolderNode *rootProjectNode = node->asFolderNode();
- if (!rootProjectNode)
- rootProjectNode = node->parentFolderNode();
+ FolderNode *folder = node->asFolderNode();
+ if (!folder)
+ folder = node->parentFolderNode();
- while (rootProjectNode && rootProjectNode->parentFolderNode() != &d->m_sessionNode)
- rootProjectNode = rootProjectNode->parentFolderNode();
-
- for (const QPair<Project *, ProjectNode *> &pair : d->m_projects) {
- if (pair.second == rootProjectNode)
- return pair.first;
- }
- return nullptr;
-}
+ while (folder && folder->parentFolderNode())
+ folder = folder->parentFolderNode();
-Node *SessionManager::nodeForProject(Project *project)
-{
- for (const QPair<Project *,ProjectNode*> &pair : d->m_projects) {
- if (pair.first == project)
- return pair.second;
+ for (Project *pro : d->m_projects) {
+ if (pro->containerNode() == folder)
+ return pro;
}
return nullptr;
}
@@ -771,17 +727,9 @@ void SessionManager::removeProjects(QList<Project *> remove)
// Delete projects
foreach (Project *pro, remove) {
pro->saveSettings();
- pro->setRootProjectNode(nullptr); // Deregister project with sessionnode!
// Remove the project node:
- Node *projectNode = nodeForProject(pro);
- d->m_sessionNode.removeNode(projectNode);
-
- d->m_projects
- = Utils::filtered(d->m_projects, [pro](const QPair<Project *, ProjectNode *> &pair)
- {
- return pair.first != pro;
- });
+ d->m_projects.removeOne(pro);
if (pro == d->m_startupProject)
setStartupProject(nullptr);
@@ -965,9 +913,9 @@ void SessionManagerPrivate::restoreStartupProject(const PersistentSettingsReader
{
const QString startupProject = reader.restoreValue(QLatin1String("StartupProject")).toString();
if (!startupProject.isEmpty()) {
- for (const QPair<Project *, ProjectNode *> &pro : m_projects) {
- if (pro.first->projectFilePath().toString() == startupProject) {
- m_instance->setStartupProject(pro.first);
+ for (Project *pro : m_projects) {
+ if (pro->projectFilePath().toString() == startupProject) {
+ m_instance->setStartupProject(pro);
break;
}
}
@@ -976,7 +924,7 @@ void SessionManagerPrivate::restoreStartupProject(const PersistentSettingsReader
if (!startupProject.isEmpty())
qWarning() << "Could not find startup project" << startupProject;
if (hasProjects())
- m_instance->setStartupProject(m_projects.first().first);
+ m_instance->setStartupProject(m_projects.first());
}
}
@@ -1140,11 +1088,6 @@ QString SessionManager::lastSession()
return ICore::settings()->value(QLatin1String("ProjectExplorer/StartupSession")).toString();
}
-SessionNode *SessionManager::sessionNode()
-{
- return &d->m_sessionNode;
-}
-
void SessionManager::reportProjectLoadingProgress()
{
d->sessionLoadingProgress();