aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/projectbuilddata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/buildgraph/projectbuilddata.cpp')
-rw-r--r--src/lib/corelib/buildgraph/projectbuilddata.cpp54
1 files changed, 14 insertions, 40 deletions
diff --git a/src/lib/corelib/buildgraph/projectbuilddata.cpp b/src/lib/corelib/buildgraph/projectbuilddata.cpp
index 3f8634b51..0e846ae53 100644
--- a/src/lib/corelib/buildgraph/projectbuilddata.cpp
+++ b/src/lib/corelib/buildgraph/projectbuilddata.cpp
@@ -261,48 +261,24 @@ void ProjectBuildData::removeArtifactAndExclusiveDependents(Artifact *artifact,
removeArtifact(artifact, logger, removeFromDisk, removeFromProduct);
}
-template <class Func>
-void forEachRuleNode(BuildGraphNode *n, const Func &f)
+static void removeFromRuleNodes(Artifact *artifact, const Logger &logger)
{
- if (n->type() != BuildGraphNode::RuleNodeType)
- return;
- f(static_cast<RuleNode *>(n));
- foreach (BuildGraphNode *c, n->children)
- forEachRuleNode(c, f);
-}
-
-template <class Func>
-void forEachRuleNode(const TopLevelProject *project, const Func &f)
-{
- foreach (const ResolvedProductPtr &product, project->allProducts()) {
+ foreach (const ResolvedProductPtr &product,
+ artifact->product->topLevelProject()->allProducts()) {
if (!product->buildData)
continue;
- foreach (BuildGraphNode *n, product->buildData->roots)
- forEachRuleNode(n, f);
- }
-}
-
-class RemoveOldInputArtifactFromRuleNode
-{
-public:
- RemoveOldInputArtifactFromRuleNode(Artifact *artifact, const Logger &logger)
- : m_artifact(artifact), m_logger(logger)
- {
- }
-
- void operator()(RuleNode *ruleNode) const
- {
- if (m_logger.traceEnabled()) {
- m_logger.qbsTrace() << "[BG] remove old input " << m_artifact->filePath()
- << " from rule " << ruleNode->rule()->toString();
+ foreach (BuildGraphNode *n, product->buildData->nodes) {
+ if (n->type() != BuildGraphNode::RuleNodeType)
+ continue;
+ RuleNode * const ruleNode = static_cast<RuleNode *>(n);
+ if (logger.traceEnabled()) {
+ logger.qbsTrace() << "[BG] remove old input " << artifact->filePath()
+ << " from rule " << ruleNode->rule()->toString();
+ }
+ ruleNode->removeOldInputArtifact(artifact);
}
- ruleNode->removeOldInputArtifact(m_artifact);
}
-
-private:
- Artifact * const m_artifact;
- const Logger &m_logger;
-};
+}
void ProjectBuildData::removeArtifact(Artifact *artifact,
const Logger &logger, bool removeFromDisk, bool removeFromProduct)
@@ -318,9 +294,7 @@ void ProjectBuildData::removeArtifact(Artifact *artifact,
artifact->product->buildData->roots.remove(artifact);
removeArtifactFromSet(artifact, artifact->product->buildData->artifactsByFileTag);
}
- forEachRuleNode(artifact->product->topLevelProject(),
- RemoveOldInputArtifactFromRuleNode(artifact, logger));
-
+ removeFromRuleNodes(artifact, logger);
disconnectArtifact(artifact, logger);
if (artifact->transformer) {
artifact->product->unregisterArtifactWithChangedInputs(artifact);