summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-05-03 13:46:02 +0200
committerTobias Hunger <tobias.hunger@qt.io>2017-05-04 09:16:56 +0000
commit0a3409112b3c5f85362a722531b7dd8c88f25fbf (patch)
tree706ed50c0d6a22c1b3120611cc9e8bacefe98c37
parentb0f1aa98a853062b7e0ead1414ae8970242dd25f (diff)
downloadqt-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.cpp4
-rw-r--r--src/plugins/nim/project/nimproject.cpp4
-rw-r--r--src/plugins/projectexplorer/project.cpp14
-rw-r--r--src/plugins/projectexplorer/project.h4
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp16
-rw-r--r--src/plugins/projectexplorer/projectnodes.h3
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp11
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();
}