summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph/artifactvisitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/buildgraph/artifactvisitor.cpp')
-rw-r--r--src/lib/buildgraph/artifactvisitor.cpp35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/lib/buildgraph/artifactvisitor.cpp b/src/lib/buildgraph/artifactvisitor.cpp
index 24829c51e..049b0c663 100644
--- a/src/lib/buildgraph/artifactvisitor.cpp
+++ b/src/lib/buildgraph/artifactvisitor.cpp
@@ -31,7 +31,6 @@
#include "artifact.h"
#include "productbuilddata.h"
#include <language/language.h>
-#include <tools/qbsassert.h>
namespace qbs {
namespace Internal {
@@ -40,34 +39,26 @@ ArtifactVisitor::ArtifactVisitor(int artifactType) : m_artifactType(artifactType
{
}
-void ArtifactVisitor::visitArtifact(Artifact *artifact)
+void ArtifactVisitor::visitProduct(const ResolvedProductConstPtr &product)
{
- QBS_ASSERT(artifact, return);
- if (m_allArtifacts.contains(artifact))
- return;
- m_allArtifacts << artifact;
- if (m_artifactType & artifact->artifactType)
- doVisit(artifact);
- else if (m_artifactType == Artifact::Generated)
- return;
- foreach (Artifact * const child, artifact->children)
- visitArtifact(child);
+ product->accept(this);
}
-void ArtifactVisitor::visitProduct(const ResolvedProductConstPtr &product)
+void ArtifactVisitor::visitProject(const ResolvedProjectConstPtr &project)
{
- if (!product->buildData)
- return;
- foreach (Artifact * const artifact, product->buildData->targetArtifacts)
- visitArtifact(artifact);
+ project->accept(this);
}
-void ArtifactVisitor::visitProject(const ResolvedProjectConstPtr &project)
+bool ArtifactVisitor::visit(Artifact *artifact)
{
- foreach (const ResolvedProductConstPtr &product, project->products)
- visitProduct(product);
- foreach (const ResolvedProjectConstPtr &subProject, project->subProjects)
- visitProject(subProject);
+ if (m_allArtifacts.contains(artifact))
+ return false;
+ m_allArtifacts << artifact;
+ if (m_artifactType & artifact->artifactType)
+ doVisit(artifact);
+ foreach (BuildGraphNode *child, artifact->children)
+ child->accept(this);
+ return false; // handle child traversal ourselves
}
} // namespace Internal