aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-05-19 15:34:36 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-05-20 16:32:28 +0200
commitdc8eb4dc803848ae83b227095a68344211191407 (patch)
tree993663b41549bdedf9f9b503b7db121a9c6f47ff
parentb3a734f802df6d969b7a3b5f1740444f758bf020 (diff)
move scanner determination to separate function
Preparation for fixing QBS-566. Change-Id: I2acdb648dc9fe247458aff76caa716c79058fa84 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp57
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.h1
2 files changed, 32 insertions, 26 deletions
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 173c0c013..f3b57e438 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -190,9 +190,7 @@ void InputArtifactScanner::scanForFileDependencies(Artifact *inputArtifact)
QSet<QString> visitedFilePaths;
QList<Artifact*> artifactsToScan;
artifactsToScan.append(inputArtifact);
- QSet<DependencyScanner*> scanners;
- TopLevelProject *project = inputArtifact->product->topLevelProject();
- ScriptEngine* engine = project->buildData->evaluationContext->engine();
+ const QSet<DependencyScanner *> scanners = scannersForArtifact(inputArtifact);
while (!artifactsToScan.isEmpty()) {
Artifact* artifactToBeScanned = artifactsToScan.takeFirst();
const QString &filePathToBeScanned = artifactToBeScanned->filePath();
@@ -200,29 +198,6 @@ void InputArtifactScanner::scanForFileDependencies(Artifact *inputArtifact)
continue;
visitedFilePaths.insert(filePathToBeScanned);
- scanners.clear();
- ResolvedProduct* product = artifactToBeScanned->product.data();
- QHash<FileTag, InputArtifactScannerContext::DependencyScannerCacheItem> &scannerCache = m_context->scannersCache[product];
- foreach (const FileTag &fileTag, artifactToBeScanned->fileTags) {
- InputArtifactScannerContext::DependencyScannerCacheItem &cache = scannerCache[fileTag];
- if (!cache.valid) {
- cache.valid = true;
- foreach (ScannerPlugin *scanner, ScannerPluginManager::scannersForFileTag(fileTag)) {
- PluginDependencyScanner *pluginScanner = new PluginDependencyScanner(scanner);
- cache.scanners += DependencyScannerPtr(pluginScanner);
- }
- foreach (const ResolvedScannerConstPtr &scanner, product->scanners) {
- if (scanner->inputs.contains(fileTag)) {
- UserDependencyScanner *userScanner = new UserDependencyScanner(scanner, m_logger, engine);
- cache.scanners += DependencyScannerPtr(userScanner);
- break;
- }
- }
- }
- foreach (const DependencyScannerPtr &scanner, cache.scanners) {
- scanners += scanner.data();
- }
- }
foreach (DependencyScanner *scanner, scanners) {
scanForScannerFileDependencies(scanner, inputArtifact, artifactToBeScanned,
scanner->recursive() ? &artifactsToScan : 0, cacheItem[scanner->key()]);
@@ -230,6 +205,36 @@ void InputArtifactScanner::scanForFileDependencies(Artifact *inputArtifact)
}
}
+QSet<DependencyScanner *> InputArtifactScanner::scannersForArtifact(const Artifact *artifact) const
+{
+ QSet<DependencyScanner *> scanners;
+ ResolvedProduct *product = artifact->product.data();
+ ScriptEngine *engine = product->topLevelProject()->buildData->evaluationContext->engine();
+ QHash<FileTag, InputArtifactScannerContext::DependencyScannerCacheItem> &scannerCache
+ = m_context->scannersCache[product];
+ foreach (const FileTag &fileTag, artifact->fileTags) {
+ InputArtifactScannerContext::DependencyScannerCacheItem &cache = scannerCache[fileTag];
+ if (!cache.valid) {
+ cache.valid = true;
+ foreach (ScannerPlugin *scanner, ScannerPluginManager::scannersForFileTag(fileTag)) {
+ PluginDependencyScanner *pluginScanner = new PluginDependencyScanner(scanner);
+ cache.scanners += DependencyScannerPtr(pluginScanner);
+ }
+ foreach (const ResolvedScannerConstPtr &scanner, product->scanners) {
+ if (scanner->inputs.contains(fileTag)) {
+ cache.scanners += DependencyScannerPtr(
+ new UserDependencyScanner(scanner, m_logger, engine));
+ break;
+ }
+ }
+ }
+ foreach (const DependencyScannerPtr &scanner, cache.scanners) {
+ scanners += scanner.data();
+ }
+ }
+ return scanners;
+}
+
void InputArtifactScanner::scanForScannerFileDependencies(DependencyScanner *scanner,
Artifact *inputArtifact, Artifact* artifactToBeScanned, QList<Artifact *> *artifactsToScan,
InputArtifactScannerContext::ScannerResolvedDependenciesCache &cache)
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.h b/src/lib/corelib/buildgraph/inputartifactscanner.h
index 7f1f81c7d..a1c8a8a18 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.h
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.h
@@ -121,6 +121,7 @@ public:
private:
void scanForFileDependencies(Artifact *inputArtifact);
+ QSet<DependencyScanner *> scannersForArtifact(const Artifact *artifact) const;
void scanForScannerFileDependencies(DependencyScanner *scanner,
Artifact *inputArtifact, Artifact* artifactToBeScanned,
QList<Artifact*> *artifactsToScan,