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>
This commit is contained in:
Tobias Hunger
2017-12-06 10:58:59 +01:00
parent 18f38ff18e
commit f542e24eca
5 changed files with 40 additions and 28 deletions

View File

@@ -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.