From d91045953cda7aeb655e501561d78c7ad14038fa Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Sun, 25 Oct 2020 18:18:46 +0100 Subject: Get rid of goto in InputArtifactScanner::resolveScanResultDependencies Change-Id: I9220b1e6344e90401abf4fb91115e77a3a6c996f Reviewed-by: Christian Kandeler --- .../corelib/buildgraph/inputartifactscanner.cpp | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/lib/corelib/buildgraph') diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp index fea8c8c7d..ad674596a 100644 --- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp +++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp @@ -266,23 +266,25 @@ void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputAr const RawScanResult &scanResult, QList *artifactsToScan, InputArtifactScannerContext::ScannerResolvedDependenciesCache &cache) { - for (const RawScannedDependency &dependency : scanResult.deps) { + auto getResolvedDependency = [inputArtifact, &cache](const RawScannedDependency &dependency) + -> ResolvedDependency* + { const QString &dependencyFilePath = dependency.filePath(); InputArtifactScannerContext::ResolvedDependencyCacheItem &cachedResolvedDependencyItem = cache.resolvedDependenciesCache[dependency.dirPath()][dependency.fileName()]; ResolvedDependency &resolvedDependency = cachedResolvedDependencyItem.resolvedDependency; if (cachedResolvedDependencyItem.valid) { if (resolvedDependency.filePath.isEmpty()) - goto unresolved; - goto resolved; + return nullptr; + return &resolvedDependency; } cachedResolvedDependencyItem.valid = true; if (FileInfo::isAbsolute(dependencyFilePath)) { resolveDepencency(dependency, inputArtifact->product.get(), &resolvedDependency); if (resolvedDependency.filePath.isEmpty()) - goto unresolved; - goto resolved; + return nullptr; + return &resolvedDependency; } // try include paths @@ -290,14 +292,19 @@ void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputAr resolveDepencency(dependency, inputArtifact->product.get(), &resolvedDependency, includePath); if (resolvedDependency.isValid()) - goto resolved; + return &resolvedDependency; } + return nullptr; + }; -unresolved: - qCWarning(lcDepScan) << "unresolved dependency " << dependencyFilePath; - continue; + for (const RawScannedDependency &dependency : scanResult.deps) { + const auto maybeResolvedDependency = getResolvedDependency(dependency); + if (!maybeResolvedDependency) { + qCWarning(lcDepScan) << "unresolved dependency " << dependency.filePath(); + continue; + } + auto &resolvedDependency = *maybeResolvedDependency; -resolved: handleDependency(resolvedDependency); if (artifactsToScan && resolvedDependency.file) { if (resolvedDependency.file->fileType() == FileResourceBase::FileTypeArtifact) { -- cgit v1.2.3