summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-12-06 10:58:59 +0100
committerTobias Hunger <tobias.hunger@qt.io>2017-12-08 09:56:29 +0000
commitf542e24eca61cc77616938c9bd03bfee97845473 (patch)
tree6163186e7ba0889e5cd98611bc797370bdb7ba6a /src/plugins
parent18f38ff18ee0b4be28d6c904bf0ebf97b364b149 (diff)
downloadqt-creator-f542e24eca61cc77616938c9bd03bfee97845473.tar.gz
Project: Make Project::file take a std::function to match files
Make Project::files take a standard function to match files with instead of an enum (and a std::function). Change-Id: I6a24e40dba0e972ff96c0a57e775d2377e2545e0 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp4
-rw-r--r--src/plugins/nim/project/nimproject.cpp2
-rw-r--r--src/plugins/projectexplorer/project.cpp34
-rw-r--r--src/plugins/projectexplorer/project.h13
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp15
5 files changed, 40 insertions, 28 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index cb085b3b5c..a13c046961 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -728,7 +728,9 @@ 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 FileNameList fileList = files(SourceFiles, [&fileExtensions](const Node *n) {
+ const FileNameList fileList = files([&fileExtensions](const Node *n) {
+ if (!SourceFiles(n))
+ return false;
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 2b5e8c0bcc..47bd87ee12 100644
--- a/src/plugins/nim/project/nimproject.cpp
+++ b/src/plugins/nim/project/nimproject.cpp
@@ -177,7 +177,7 @@ bool NimProject::supportsKit(Kit *k, QString *errorMessage) const
FileNameList NimProject::nimFiles() const
{
- return files(AllFiles, [](const ProjectExplorer::Node *n) { return n->filePath().endsWith(".nim"); });
+ return files([](const ProjectExplorer::Node *n) { return AllFiles(n) && n->filePath().endsWith(".nim"); });
}
QVariantMap NimProject::toMap() const
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 04be03dadc..2c149a3646 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -86,6 +86,23 @@ const char PLUGIN_SETTINGS_KEY[] = "ProjectExplorer.Project.PluginSettings";
namespace ProjectExplorer {
+static bool isListedFileNode(const Node *node)
+{
+ return node->nodeType() == NodeType::File && node->listInProject();
+}
+
+const Project::NodeMatcher Project::AllFiles = [](const Node *node) {
+ return isListedFileNode(node);
+};
+
+const Project::NodeMatcher Project::SourceFiles = [](const Node *node) {
+ return isListedFileNode(node) && !node->isGenerated();
+};
+
+const Project::NodeMatcher Project::GeneratedFiles = [](const Node *node) {
+ return isListedFileNode(node) && node->isGenerated();
+};
+
// --------------------------------------------------------------------
// ProjectDocument:
// --------------------------------------------------------------------
@@ -557,8 +574,7 @@ Project::RestoreResult Project::restoreSettings(QString *errorMessage)
return result;
}
-Utils::FileNameList Project::files(Project::FilesMode fileMode,
- const std::function<bool(const Node *)> &filter) const
+Utils::FileNameList Project::files(const Project::NodeMatcher &filter) const
{
Utils::FileNameList result;
@@ -567,24 +583,20 @@ Utils::FileNameList Project::files(Project::FilesMode fileMode,
QSet<Utils::FileName> alreadySeen;
rootProjectNode()->forEachGenericNode([&](const Node *n) {
+ if (filter && !filter(n))
+ return;
+
const Utils::FileName path = n->filePath();
const int count = alreadySeen.count();
alreadySeen.insert(path);
if (count == alreadySeen.count())
return; // skip duplicates
- if (!n->listInProject())
- return;
- if (filter && !filter(n))
- return;
- if ((fileMode == AllFiles)
- || (fileMode == SourceFiles && !n->isGenerated())
- || (fileMode == GeneratedFiles && n->isGenerated()))
- result.append(path);
+
+ result.append(path);
});
return result;
}
-
/*!
Serializes all data into a QVariantMap.
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 79e0e3506a..33e212864f 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -130,13 +130,12 @@ public:
enum class RestoreResult { Ok, Error, UserAbort };
RestoreResult restoreSettings(QString *errorMessage);
- enum FilesMode {
- SourceFiles = 0x1,
- GeneratedFiles = 0x2,
- AllFiles = SourceFiles | GeneratedFiles
- };
- Utils::FileNameList files(FilesMode fileMode,
- const std::function<bool(const Node *)> &filter = {}) const;
+ using NodeMatcher = std::function<bool(const Node*)>;
+ static const NodeMatcher AllFiles;
+ static const NodeMatcher SourceFiles;
+ static const NodeMatcher GeneratedFiles;
+
+ Utils::FileNameList files(const NodeMatcher &matcher) const;
virtual QStringList filesGeneratedFrom(const QString &sourceFile) const;
static QString makeUnique(const QString &preferredName, const QStringList &usedNames);
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index de9259933f..4da912cc90 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -86,14 +86,13 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject(
Constants::QMLPROJECT_MIMETYPE,
Constants::QMLTYPES_MIMETYPE,
Constants::QMLUI_MIMETYPE };
- projectInfo.sourceFiles = Utils::transform(project->files(Project::SourceFiles,
- [&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;
+ projectInfo.sourceFiles = Utils::transform(project->files([&qmlTypeNames](const Node *n) {
+ if (!Project::SourceFiles(n))
+ return false;
+ const FileNode *fn = n->asFileNode();
+ return fn && fn->fileType() == FileType::QML
+ && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(),
+ MimeMatchMode::MatchExtension).name());
}), &FileName::toString);
activeTarget = project->activeTarget();
}