diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-05-03 13:46:02 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-05-04 09:16:56 +0000 |
commit | 0a3409112b3c5f85362a722531b7dd8c88f25fbf (patch) | |
tree | 706ed50c0d6a22c1b3120611cc9e8bacefe98c37 | |
parent | b0f1aa98a853062b7e0ead1414ae8970242dd25f (diff) | |
download | qt-creator-0a3409112b3c5f85362a722531b7dd8c88f25fbf.tar.gz |
ProjectNodes: add listInProject() to Node
Add a setter/getter for listInProject to Node and make the project
list all nodes with this property set in Project::files.
Task-number: QTCREATORBUG-18132
Change-Id: I334e627856d1bc0d033e13c5d629f6657d8d7fee
Reviewed-by: hjk <hjk@qt.io>
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeproject.cpp | 4 | ||||
-rw-r--r-- | src/plugins/nim/project/nimproject.cpp | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 14 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.h | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectnodes.cpp | 16 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectnodes.h | 3 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsmodelmanager.cpp | 11 |
7 files changed, 40 insertions, 16 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index b11480eb2c..ce4c54a9fe 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -531,8 +531,8 @@ void CMakeProject::createGeneratedCodeModelSupport() = Utils::transform<QSet>(factories, [](const ExtraCompilerFactory *f) { return f->sourceTag(); }); // Find all files generated by any of the extra compilers, in a rather crude way. - const QStringList fileList = files(SourceFiles, [&fileExtensions](const FileNode *fn) { - const QString fp = fn->filePath().toString(); + const QStringList fileList = files(SourceFiles, [&fileExtensions](const Node *n) { + const QString fp = n->filePath().toString(); const int pos = fp.lastIndexOf('.'); return pos >= 0 && fileExtensions.contains(fp.mid(pos + 1)); }); diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index fe58ea5c37..5db9fd554a 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -168,8 +168,8 @@ bool NimProject::supportsKit(Kit *k, QString *errorMessage) const FileNameList NimProject::nimFiles() const { - const QStringList nim = files(AllFiles, [](const ProjectExplorer::FileNode *fn) { - return fn->filePath().endsWith(".nim"); + const QStringList nim = files(AllFiles, [](const ProjectExplorer::Node *n) { + return n->filePath().endsWith(".nim"); }); return Utils::transform(nim, [](const QString &fp) { return Utils::FileName::fromString(fp); }); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index f12efd6d44..09475e24b8 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -548,7 +548,7 @@ Project::RestoreResult Project::restoreSettings(QString *errorMessage) } QStringList Project::files(Project::FilesMode fileMode, - const std::function<bool (const FileNode *)> &filter) const + const std::function<bool(const Node *)> &filter) const { QStringList result; @@ -556,17 +556,19 @@ QStringList Project::files(Project::FilesMode fileMode, return result; QSet<QString> alreadySeen; - rootProjectNode()->forEachNode([&](const FileNode *fn) { - const QString path = fn->filePath().toString(); + rootProjectNode()->forEachGenericNode([&](const Node *n) { + const QString path = n->filePath().toString(); const int count = alreadySeen.count(); alreadySeen.insert(path); if (count == alreadySeen.count()) return; // skip duplicates - if (filter && !filter(fn)) + if (!n->listInProject()) + return; + if (filter && !filter(n)) return; if ((fileMode == AllFiles) - || (fileMode == SourceFiles && !fn->isGenerated()) - || (fileMode == GeneratedFiles && fn->isGenerated())) + || (fileMode == SourceFiles && !n->isGenerated()) + || (fileMode == GeneratedFiles && n->isGenerated())) result.append(path); }); return result; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index edc5b4c2ce..f76a1513de 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -47,8 +47,8 @@ namespace ProjectExplorer { class BuildInfo; class ContainerNode; class EditorConfiguration; -class FileNode; class NamedWidget; +class Node; class ProjectImporter; class ProjectNode; class ProjectPrivate; @@ -133,7 +133,7 @@ public: AllFiles = SourceFiles | GeneratedFiles }; QStringList files(FilesMode fileMode, - const std::function<bool(const FileNode *)> &filter = {}) const; + const std::function<bool(const Node *)> &filter = {}) const; virtual QStringList filesGeneratedFrom(const QString &sourceFile) const; static QString makeUnique(const QString &preferredName, const QStringList &usedNames); diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 3b121a9594..da531056eb 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -127,6 +127,11 @@ void Node::setPriority(int p) m_priority = p; } +void Node::setListInProject(bool l) +{ + m_flags.setFlag(FlagListInProject, l); +} + void Node::setIsGenerated(bool g) { m_flags.setFlag(FlagIsGenerated, g); @@ -154,6 +159,14 @@ int Node::priority() const } /*! + Returns \c true if the Node should be listed as part of the projects file list. + */ +bool Node::listInProject() const +{ + return m_flags.testFlag(FlagListInProject); +} + +/*! The project that owns and manages the node. It is the first project in the list of ancestors. */ @@ -291,6 +304,7 @@ FileNode::FileNode(const Utils::FileName &filePath, bool generated, int line) : Node(NodeType::File, filePath, line), m_fileType(fileType) { + setListInProject(true); setIsGenerated(generated); if (fileType == FileType::Project) setPriority(DefaultProjectFilePriority); @@ -303,6 +317,7 @@ FileNode *FileNode::clone() const auto fn = new FileNode(filePath(), fileType(), isGenerated(), line()); fn->setEnabled(isEnabled()); fn->setPriority(priority()); + fn->setListInProject(listInProject()); return fn; } @@ -390,6 +405,7 @@ FolderNode::FolderNode(const Utils::FileName &folderPath, NodeType nodeType, con m_displayName(displayName) { setPriority(DefaultFolderPriority); + setListInProject(false); setIsGenerated(false); if (m_displayName.isEmpty()) m_displayName = folderPath.toUserOutput(); diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 64d09abc74..dc03cd5aec 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -129,6 +129,7 @@ public: virtual QString displayName() const; virtual QString tooltip() const; bool isEnabled() const; + bool listInProject() const; bool isGenerated() const; virtual bool supportsAction(ProjectAction action, Node *node) const; @@ -155,6 +156,7 @@ protected: Node(NodeType nodeType, const Utils::FileName &filePath, int line = -1); void setPriority(int priority); + void setListInProject(bool l); void setIsGenerated(bool g); private: @@ -167,6 +169,7 @@ private: FlagNone = 0, FlagIsEnabled = 1 << 0, FlagIsGenerated = 1 << 1, + FlagListInProject = 1 << 2, }; using NodeFlags = QFlags<NodeFlag>; NodeFlags m_flags = FlagIsEnabled; diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index e13bbb3e29..4b21b6d4a1 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -84,10 +84,13 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject( Constants::QMLTYPES_MIMETYPE, Constants::QMLUI_MIMETYPE }; projectInfo.sourceFiles = project->files(Project::SourceFiles, - [&qmlTypeNames](const FileNode *fn) { - return fn->fileType() == FileType::QML - && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(), - MimeMatchMode::MatchExtension).name()); + [&qmlTypeNames](const Node *n) { + if (const FileNode *fn = n->asFileNode()) { + return fn->fileType() == FileType::QML + && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(), + MimeMatchMode::MatchExtension).name()); + } + return false; }); activeTarget = project->activeTarget(); } |