ProjectExplorer: Remove ProjectNode::m_projectNodes

They are duplicated in m_folderNodes, use them.

Change-Id: I4571720f1ef3daf098870a3cf05fa28a1002bb3f
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
hjk
2017-02-07 13:49:37 +01:00
parent c985914bde
commit 95e2d7f545
8 changed files with 35 additions and 106 deletions

View File

@@ -81,11 +81,6 @@ QList<Node*> FindNodesForFileVisitor::nodes() const
return m_nodes; return m_nodes;
} }
void FindNodesForFileVisitor::visitProjectNode(ProjectNode *node)
{
visitFolderNode(node);
}
void FindNodesForFileVisitor::visitFolderNode(FolderNode *node) void FindNodesForFileVisitor::visitFolderNode(FolderNode *node)
{ {
if (node->filePath() == m_path) if (node->filePath() == m_path)
@@ -96,11 +91,6 @@ void FindNodesForFileVisitor::visitFolderNode(FolderNode *node)
} }
} }
void FindNodesForFileVisitor::visitSessionNode(SessionNode *node)
{
visitFolderNode(node);
}
/*! /*!
\class FindAllFilesVisitor \class FindAllFilesVisitor
@@ -112,11 +102,6 @@ Utils::FileNameList FindAllFilesVisitor::filePaths() const
return m_filePaths; return m_filePaths;
} }
void FindAllFilesVisitor::visitProjectNode(ProjectNode *projectNode)
{
visitFolderNode(projectNode);
}
void FindAllFilesVisitor::visitFolderNode(FolderNode *folderNode) void FindAllFilesVisitor::visitFolderNode(FolderNode *folderNode)
{ {
m_filePaths.append(folderNode->filePath()); m_filePaths.append(folderNode->filePath());

View File

@@ -36,15 +36,13 @@ namespace ProjectExplorer {
class Node; class Node;
class FileNode; class FileNode;
class SessionNode; class SessionNode;
class ProjectNode;
class FolderNode; class FolderNode;
class PROJECTEXPLORER_EXPORT NodesVisitor { class PROJECTEXPLORER_EXPORT NodesVisitor
{
public: public:
virtual ~NodesVisitor(); virtual ~NodesVisitor();
virtual void visitSessionNode(SessionNode *) { }
virtual void visitProjectNode(ProjectNode *) { }
virtual void visitFolderNode(FolderNode *) { } virtual void visitFolderNode(FolderNode *) { }
protected: protected:
@@ -53,26 +51,25 @@ protected:
/* useful visitors */ /* useful visitors */
class PROJECTEXPLORER_EXPORT FindNodesForFileVisitor : public NodesVisitor { class PROJECTEXPLORER_EXPORT FindNodesForFileVisitor : public NodesVisitor
{
public: public:
explicit FindNodesForFileVisitor(const Utils::FileName &fileToSearch); explicit FindNodesForFileVisitor(const Utils::FileName &fileToSearch);
QList<Node*> nodes() const; QList<Node*> nodes() const;
void visitProjectNode(ProjectNode *node) override;
void visitFolderNode(FolderNode *node) override; void visitFolderNode(FolderNode *node) override;
void visitSessionNode(SessionNode *node) override;
private: private:
Utils::FileName m_path; Utils::FileName m_path;
QList<Node *> m_nodes; QList<Node *> m_nodes;
}; };
class PROJECTEXPLORER_EXPORT FindAllFilesVisitor : public NodesVisitor { class PROJECTEXPLORER_EXPORT FindAllFilesVisitor : public NodesVisitor
{
public: public:
Utils::FileNameList filePaths() const; Utils::FileNameList filePaths() const;
void visitProjectNode(ProjectNode *projectNode) override;
void visitFolderNode(FolderNode *folderNode) override; void visitFolderNode(FolderNode *folderNode) override;
private: private:

View File

@@ -686,24 +686,24 @@ QList<RunConfiguration *> ProjectNode::runConfigurations() const
return QList<RunConfiguration *>(); return QList<RunConfiguration *>();
} }
void ProjectNode::accept(NodesVisitor *visitor)
{
visitor->visitProjectNode(this);
foreach (FolderNode *folder, m_folderNodes)
folder->accept(visitor);
}
ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const
{ {
return Utils::findOrDefault(m_projectNodes, [&file](const ProjectNode *fn) { for (FolderNode *node : m_folderNodes) {
return fn->filePath() == file; if (ProjectNode *pnode = node->asProjectNode())
}); if (pnode->filePath() == file)
return pnode;
}
return nullptr;
} }
QList<ProjectNode*> ProjectNode::projectNodes() const QList<ProjectNode*> FolderNode::projectNodes() const
{ {
return m_projectNodes; QList<ProjectNode *> nodes;
for (FolderNode *node : m_folderNodes) {
if (ProjectNode *pnode = node->asProjectNode())
nodes.append(pnode);
}
return nodes;
} }
/*! /*!
@@ -717,31 +717,13 @@ void ProjectNode::addProjectNode(ProjectNode *subProject)
subProject->setParentFolderNode(this); subProject->setParentFolderNode(this);
m_folderNodes.append(subProject); m_folderNodes.append(subProject);
m_projectNodes.append(subProject);
Utils::sort(m_folderNodes); Utils::sort(m_folderNodes);
Utils::sort(m_projectNodes);
} }
bool FolderNode::isEmpty() const
/*!
Removes all child nodes from the node hierarchy and deletes them.
*/
void ProjectNode::makeEmpty()
{ {
foreach (ProjectNode *subProject, m_projectNodes) return m_fileNodes.isEmpty() && m_folderNodes.isEmpty();
m_folderNodes.removeAll(subProject);
qDeleteAll(m_projectNodes);
m_projectNodes.clear();
FolderNode::makeEmpty();
}
bool ProjectNode::isEmpty() const
{
return m_fileNodes.isEmpty() && m_folderNodes.isEmpty() && m_projectNodes.isEmpty();
} }
/*! /*!
@@ -758,24 +740,11 @@ QList<ProjectAction> SessionNode::supportedActions(Node *node) const
return QList<ProjectAction>(); return QList<ProjectAction>();
} }
void SessionNode::accept(NodesVisitor *visitor)
{
visitor->visitSessionNode(this);
foreach (ProjectNode *project, m_projectNodes)
project->accept(visitor);
}
bool SessionNode::showInSimpleTree() const bool SessionNode::showInSimpleTree() const
{ {
return true; return true;
} }
QList<ProjectNode*> SessionNode::projectNodes() const
{
return m_projectNodes;
}
QString SessionNode::addFileFilter() const QString SessionNode::addFileFilter() const
{ {
return QString::fromLatin1("*.c; *.cc; *.cpp; *.cp; *.cxx; *.c++; *.h; *.hh; *.hpp; *.hxx;"); return QString::fromLatin1("*.c; *.cc; *.cpp; *.cp; *.cxx; *.c++; *.h; *.hh; *.hpp; *.hxx;");
@@ -787,16 +756,12 @@ void SessionNode::addProjectNode(ProjectNode *projectNode)
qDebug("Project node has already a parent folder")); qDebug("Project node has already a parent folder"));
projectNode->setParentFolderNode(this); projectNode->setParentFolderNode(this);
m_folderNodes.append(projectNode); m_folderNodes.append(projectNode);
m_projectNodes.append(projectNode);
Utils::sort(m_folderNodes); Utils::sort(m_folderNodes);
Utils::sort(m_projectNodes);
} }
void SessionNode::removeProjectNode(ProjectNode *projectNode) void SessionNode::removeProjectNode(ProjectNode *projectNode)
{ {
m_folderNodes.removeOne(projectNode); m_folderNodes.removeOne(projectNode);
m_projectNodes.removeOne(projectNode);
} }
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -251,6 +251,9 @@ public:
void addFolderNode(FolderNode *subFolder); void addFolderNode(FolderNode *subFolder);
void setFolderNodes(const QList<FolderNode*> &folders); void setFolderNodes(const QList<FolderNode*> &folders);
// all subFolders that are projects
QList<ProjectNode*> projectNodes() const;
void makeEmpty(); void makeEmpty();
bool isEmpty() const; bool isEmpty() const;
@@ -296,16 +299,8 @@ public:
virtual QList<RunConfiguration *> runConfigurations() const; virtual QList<RunConfiguration *> runConfigurations() const;
void accept(NodesVisitor *visitor) override;
ProjectNode *projectNode(const Utils::FileName &file) const; ProjectNode *projectNode(const Utils::FileName &file) const;
// all subFolders that are projects
QList<ProjectNode*> projectNodes() const;
void addProjectNode(ProjectNode *subProject); void addProjectNode(ProjectNode *subProject);
void removeProjectNode(ProjectNode *subProject);
void makeEmpty();
bool isEmpty() const;
ProjectNode *asProjectNode() final { return this; } ProjectNode *asProjectNode() final { return this; }
const ProjectNode *asProjectNode() const final { return this; } const ProjectNode *asProjectNode() const final { return this; }
@@ -316,8 +311,6 @@ protected:
explicit ProjectNode(const Utils::FileName &projectFilePath); explicit ProjectNode(const Utils::FileName &projectFilePath);
private: private:
QList<ProjectNode*> m_projectNodes;
// let SessionNode call setParentFolderNode // let SessionNode call setParentFolderNode
friend class SessionNode; friend class SessionNode;
}; };
@@ -327,12 +320,10 @@ class PROJECTEXPLORER_EXPORT SessionNode : public FolderNode
{ {
public: public:
SessionNode(); SessionNode();
QList<ProjectNode*> projectNodes() const;
private: private:
QList<ProjectAction> supportedActions(Node *node) const final; QList<ProjectAction> supportedActions(Node *node) const final;
QString addFileFilter() const final; QString addFileFilter() const final;
void accept(NodesVisitor *visitor) final;
bool showInSimpleTree() const final; bool showInSimpleTree() const final;
void projectDisplayNameChanged(Node *node); void projectDisplayNameChanged(Node *node);
@@ -343,8 +334,6 @@ private:
friend class SessionManager; friend class SessionManager;
void addProjectNode(ProjectNode *projectNode); void addProjectNode(ProjectNode *projectNode);
void removeProjectNode(ProjectNode *projectNode); void removeProjectNode(ProjectNode *projectNode);
QList<ProjectNode*> m_projectNodes;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -36,8 +36,8 @@ QList<QmakeProFileNode *> FindQmakeProFiles::operator()(ProjectExplorer::Project
return m_proFiles; return m_proFiles;
} }
void FindQmakeProFiles::visitProjectNode(ProjectExplorer::ProjectNode *projectNode) void FindQmakeProFiles::visitFolderNode(ProjectExplorer::FolderNode *folderNode)
{ {
if (QmakeProFileNode *pro = dynamic_cast<QmakeProFileNode *>(projectNode)) if (QmakeProFileNode *pro = dynamic_cast<QmakeProFileNode *>(folderNode))
m_proFiles.append(pro); m_proFiles.append(pro);
} }

View File

@@ -27,6 +27,8 @@
#include <projectexplorer/nodesvisitor.h> #include <projectexplorer/nodesvisitor.h>
namespace ProjectExplorer { class ProjectNode; }
namespace QmakeProjectManager { namespace QmakeProjectManager {
class QmakeProFileNode; class QmakeProFileNode;
namespace Internal { namespace Internal {
@@ -36,7 +38,7 @@ class FindQmakeProFiles: protected ProjectExplorer::NodesVisitor
public: public:
QList<QmakeProFileNode *> operator()(ProjectExplorer::ProjectNode *root); QList<QmakeProFileNode *> operator()(ProjectExplorer::ProjectNode *root);
protected: protected:
virtual void visitProjectNode(ProjectExplorer::ProjectNode *projectNode); void visitFolderNode(ProjectExplorer::FolderNode *folderNode) final;
private: private:
QList<QmakeProFileNode *> m_proFiles; QList<QmakeProFileNode *> m_proFiles;
}; };

View File

@@ -1391,18 +1391,15 @@ static QmakeProjectType proFileTemplateTypeToProjectType(ProFileEvaluator::Templ
namespace { namespace {
// feed all files accepted by any of the factories to the callback. // feed all files accepted by any of the factories to the callback.
class FindGeneratorSourcesVisitor : public NodesVisitor { class FindGeneratorSourcesVisitor : public NodesVisitor
{
public: public:
FindGeneratorSourcesVisitor( FindGeneratorSourcesVisitor(
const QList<ProjectExplorer::ExtraCompilerFactory *> &factories, const QList<ProjectExplorer::ExtraCompilerFactory *> &factories,
std::function<void(FileNode *, ProjectExplorer::ExtraCompilerFactory *)> callback) : std::function<void(FileNode *, ProjectExplorer::ExtraCompilerFactory *)> callback) :
factories(factories), callback(callback) {} factories(factories), callback(callback) {}
void visitProjectNode(ProjectNode *projectNode) void visitFolderNode(FolderNode *folderNode) final
{
visitFolderNode(projectNode);
}
void visitFolderNode(FolderNode *folderNode)
{ {
foreach (FileNode *fileNode, folderNode->fileNodes()) { foreach (FileNode *fileNode, folderNode->fileNodes()) {
foreach (ProjectExplorer::ExtraCompilerFactory *factory, factories) { foreach (ProjectExplorer::ExtraCompilerFactory *factory, factories) {

View File

@@ -161,11 +161,9 @@ class ProjectFilesVisitor : public NodesVisitor
ProjectFilesVisitor(QmakeProjectFiles *files); ProjectFilesVisitor(QmakeProjectFiles *files);
public: public:
static void findProjectFiles(QmakeProFileNode *rootNode, QmakeProjectFiles *files); static void findProjectFiles(QmakeProFileNode *rootNode, QmakeProjectFiles *files);
void visitProjectNode(ProjectNode *projectNode); void visitFolderNode(FolderNode *folderNode) final;
void visitFolderNode(FolderNode *folderNode);
private: private:
QmakeProjectFiles *m_files; QmakeProjectFiles *m_files;
@@ -199,14 +197,10 @@ void ProjectFilesVisitor::findProjectFiles(QmakeProFileNode *rootNode, QmakeProj
unique(files->proFiles); unique(files->proFiles);
} }
void ProjectFilesVisitor::visitProjectNode(ProjectNode *projectNode)
{
m_files->proFiles.append(projectNode->filePath().toString());
visitFolderNode(projectNode);
}
void ProjectFilesVisitor::visitFolderNode(FolderNode *folderNode) void ProjectFilesVisitor::visitFolderNode(FolderNode *folderNode)
{ {
if (ProjectNode *projectNode = folderNode->asProjectNode())
m_files->proFiles.append(projectNode->filePath().toString());
if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(folderNode)) if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(folderNode))
m_files->files[static_cast<int>(FileType::Resource)].push_back(folderNode->filePath().toString()); m_files->files[static_cast<int>(FileType::Resource)].push_back(folderNode->filePath().toString());