diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2013-12-04 12:08:16 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-12-04 14:57:17 +0100 |
commit | d8ff3bfaae6d76fb362a6ebb403abf1a903a7ee6 (patch) | |
tree | 338b6f6df3065579a2060f8475a2094cc3f3168b | |
parent | 32590c953ee44347ed6cc3b0f72611592be22c65 (diff) |
Fix artifact visitor.
The current implementation is overly complex and misses sibling
artifacts. Just go through the list of artifacts instead of traversing
top-down.
Change-Id: Ic665bfc977a1718ee298efda66d741bb701886c3
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | src/lib/buildgraph/artifactvisitor.cpp | 11 | ||||
-rw-r--r-- | src/lib/buildgraph/artifactvisitor.h | 1 | ||||
-rw-r--r-- | src/lib/buildgraph/cycledetector.cpp | 9 | ||||
-rw-r--r-- | src/lib/buildgraph/cycledetector.h | 1 |
4 files changed, 12 insertions, 10 deletions
diff --git a/src/lib/buildgraph/artifactvisitor.cpp b/src/lib/buildgraph/artifactvisitor.cpp index 24829c51e..c2eb6e896 100644 --- a/src/lib/buildgraph/artifactvisitor.cpp +++ b/src/lib/buildgraph/artifactvisitor.cpp @@ -42,23 +42,16 @@ ArtifactVisitor::ArtifactVisitor(int artifactType) : m_artifactType(artifactType void ArtifactVisitor::visitArtifact(Artifact *artifact) { - QBS_ASSERT(artifact, return); - if (m_allArtifacts.contains(artifact)) - return; - m_allArtifacts << artifact; + QBS_CHECK(artifact); if (m_artifactType & artifact->artifactType) doVisit(artifact); - else if (m_artifactType == Artifact::Generated) - return; - foreach (Artifact * const child, artifact->children) - visitArtifact(child); } void ArtifactVisitor::visitProduct(const ResolvedProductConstPtr &product) { if (!product->buildData) return; - foreach (Artifact * const artifact, product->buildData->targetArtifacts) + foreach (Artifact * const artifact, product->buildData->artifacts) visitArtifact(artifact); } diff --git a/src/lib/buildgraph/artifactvisitor.h b/src/lib/buildgraph/artifactvisitor.h index 6ff6a4f11..d929768b7 100644 --- a/src/lib/buildgraph/artifactvisitor.h +++ b/src/lib/buildgraph/artifactvisitor.h @@ -52,7 +52,6 @@ private: virtual void doVisit(Artifact *artifact) = 0; const int m_artifactType; - QSet<const Artifact *> m_allArtifacts; }; } // namespace Internal diff --git a/src/lib/buildgraph/cycledetector.cpp b/src/lib/buildgraph/cycledetector.cpp index bb5d0bf38..c67d80ab8 100644 --- a/src/lib/buildgraph/cycledetector.cpp +++ b/src/lib/buildgraph/cycledetector.cpp @@ -30,6 +30,7 @@ #include "artifact.h" #include "buildgraph.h" +#include "productbuilddata.h" #include <language/language.h> #include <logging/translator.h> @@ -51,6 +52,14 @@ void CycleDetector::visitProject(const ResolvedProjectConstPtr &project) ArtifactVisitor::visitProject(project); } +void CycleDetector::visitProduct(const ResolvedProductConstPtr &product) +{ + if (!product->buildData) + return; + foreach (Artifact * const artifact, product->buildData->targetArtifacts) + visitArtifact(artifact); +} + void CycleDetector::visitArtifact(Artifact *artifact) { if (Q_UNLIKELY(m_artifactsInCurrentPath.contains(artifact))) { diff --git a/src/lib/buildgraph/cycledetector.h b/src/lib/buildgraph/cycledetector.h index 61ddac0b1..dbe0d07f9 100644 --- a/src/lib/buildgraph/cycledetector.h +++ b/src/lib/buildgraph/cycledetector.h @@ -43,6 +43,7 @@ public: CycleDetector(const Logger &logger); void visitProject(const ResolvedProjectConstPtr &project); + void visitProduct(const ResolvedProductConstPtr &product); void visitArtifact(Artifact *artifact); private: |