From f5e9326c51e6352eed919c66d0c2a213f1e5b1dc Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 26 Apr 2018 10:02:25 +0200 Subject: Make ResolvedProduct::artifactProperties a vector The value_type is not suitable for QList. Change-Id: I73d021f0c635ed46992397c4d6e3f3394ec5a7f8 Reviewed-by: Christian Kandeler --- src/lib/corelib/buildgraph/rulesapplicator.cpp | 2 +- src/lib/corelib/language/language.cpp | 6 +++--- src/lib/corelib/language/language.h | 6 +++--- src/lib/corelib/language/projectresolver.cpp | 5 ++--- src/lib/corelib/tools/stlutils.h | 7 +++++++ 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp index 72ec2fad3..58e4a8d11 100644 --- a/src/lib/corelib/buildgraph/rulesapplicator.cpp +++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp @@ -404,7 +404,7 @@ Artifact *RulesApplicator::createOutputArtifact(const QString &filePath, const F FileTags outputArtifactFileTags = fileTags.empty() ? m_product->fileTagsForFileName(outputArtifact->fileName()) : fileTags; - for (const ArtifactPropertiesConstPtr &props : qAsConst(m_product->artifactProperties)) { + for (const ArtifactPropertiesConstPtr &props : m_product->artifactProperties) { if (outputArtifactFileTags.intersects(props->fileTagsFilter())) { outputArtifact->properties = props->propertyMap(); outputArtifactFileTags += props->extraFileTags(); diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 6b9e5d056..fd3679f89 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -295,7 +295,7 @@ FileTags Rule::staticOutputFileTags() const FileTags Rule::collectedOutputFileTags() const { FileTags result = outputFileTags.empty() ? staticOutputFileTags() : outputFileTags; - for (const auto &ap : qAsConst(product->artifactProperties)) { + for (const auto &ap : product->artifactProperties) { if (ap->fileTagsFilter().intersects(result)) result += ap->extraFileTags(); } @@ -932,8 +932,8 @@ uint qHash(const RuleArtifact::Binding &b) return qHash(std::make_pair(b.code, b.name.join(QLatin1Char(',')))); } -bool artifactPropertyListsAreEqual(const QList &l1, - const QList &l2) +bool artifactPropertyListsAreEqual(const std::vector &l1, + const std::vector &l2) { return listsAreEqual(l1, l2); } diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index 38fbcd5f4..524c9cb27 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -578,7 +578,7 @@ public: std::vector scanners; std::vector groups; std::vector probes; - QList artifactProperties; + std::vector artifactProperties; QStringList missingSourceFiles; std::unique_ptr buildData; @@ -734,8 +734,8 @@ private: QVariantMap m_buildConfiguration; }; -bool artifactPropertyListsAreEqual(const QList &l1, - const QList &l2); +bool artifactPropertyListsAreEqual(const std::vector &l1, + const std::vector &l2); QString multiplexIdToString(const QString &id); diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 7341efdd4..c25e252bf 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -727,7 +727,7 @@ void ProjectResolver::resolveGroupFully(Item *item, ProjectResolver::ProjectCont } // Discard any Group with the same fileTagsFilter that was defined in a base file. - m_productContext->product->artifactProperties.removeAll(apinfo.first); + removeAll(m_productContext->product->artifactProperties, apinfo.first); } if (!isEnabled) return; @@ -1389,8 +1389,7 @@ void ProjectResolver::matchArtifactProperties(const ResolvedProductPtr &product, const QList &artifacts) { for (const SourceArtifactPtr &artifact : artifacts) { - for (const ArtifactPropertiesConstPtr &artifactProperties : - qAsConst(product->artifactProperties)) { + for (const ArtifactPropertiesConstPtr &artifactProperties : product->artifactProperties) { if (!artifact->isTargetOfModule() && artifact->fileTags.intersects(artifactProperties->fileTagsFilter())) { artifact->properties = artifactProperties->propertyMap(); diff --git a/src/lib/corelib/tools/stlutils.h b/src/lib/corelib/tools/stlutils.h index 7bb8b3a67..ad00070cf 100644 --- a/src/lib/corelib/tools/stlutils.h +++ b/src/lib/corelib/tools/stlutils.h @@ -79,6 +79,13 @@ bool removeOne(C &container, const typename C::value_type &v) return true; } +template +void removeAll(C &container, const typename C::value_type &v) +{ + container.erase(std::remove(std::begin(container), std::end(container), v), + std::end(container)); +} + template bool any_of(const Container &container, const UnaryPredicate &predicate) { -- cgit v1.2.3