diff --git a/src/plugins/clangtools/clangtidyclazytool.cpp b/src/plugins/clangtools/clangtidyclazytool.cpp index f07fdcd3f73..ec743c97949 100644 --- a/src/plugins/clangtools/clangtidyclazytool.cpp +++ b/src/plugins/clangtools/clangtidyclazytool.cpp @@ -464,11 +464,11 @@ void ClangTidyClazyTool::handleStateUpdate() } QList ClangTidyClazyTool::read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath, QString *errorMessage) const { - return readSerializedDiagnostics(filePath, projectRootDir, logFilePath, errorMessage); + return readSerializedDiagnostics(filePath, projectFiles, logFilePath, errorMessage); } void ClangTidyClazyTool::onNewDiagnosticsAvailable(const QList &diagnostics) diff --git a/src/plugins/clangtools/clangtidyclazytool.h b/src/plugins/clangtools/clangtidyclazytool.h index c0765dc6a9e..17832905389 100644 --- a/src/plugins/clangtools/clangtidyclazytool.h +++ b/src/plugins/clangtools/clangtidyclazytool.h @@ -54,7 +54,7 @@ public: void startTool(bool askUserForFileSelection) final; QList read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath, QString *errorMessage) const final; diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index 0f322feb47b..1d94719759c 100644 --- a/src/plugins/clangtools/clangtool.h +++ b/src/plugins/clangtools/clangtool.h @@ -50,7 +50,7 @@ public: virtual void startTool(bool askUserForFileSelection) = 0; virtual QList read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath, QString *errorMessage) const = 0; diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index cc8dd249714..64672934172 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -288,6 +288,7 @@ void ClangToolRunControl::start() } m_projectInfo = CppTools::CppModelManager::instance()->projectInfo(m_target->project()); + m_projectFiles = Utils::toSet(m_target->project()->files(Project::AllFiles)); // Some projects provides CompilerCallData once a build is finished, if (m_projectInfo.configurationOrFilesChanged(m_projectInfoBeforeBuild)) { @@ -360,6 +361,7 @@ void ClangToolRunControl::stop() QObject::disconnect(runner, nullptr, this, nullptr); delete runner; } + m_projectFiles.clear(); m_runners.clear(); m_unitsToProcess.clear(); m_progress.reportFinished(); @@ -390,22 +392,14 @@ void ClangToolRunControl::analyzeNextFile() Utils::StdOutFormat); } -static Utils::FilePath cleanPath(const Utils::FilePath &filePath) -{ - return Utils::FilePath::fromString(QDir::cleanPath(filePath.toString())); -} - void ClangToolRunControl::onRunnerFinishedWithSuccess(const QString &filePath) { const QString logFilePath = qobject_cast(sender())->logFilePath(); qCDebug(LOG) << "onRunnerFinishedWithSuccess:" << logFilePath; - QTC_ASSERT(m_projectInfo.project(), return); - const Utils::FilePath projectRootDir = cleanPath(m_projectInfo.project()->projectDirectory()); - QString errorMessage; const QList diagnostics = tool()->read(filePath, - projectRootDir, + m_projectFiles, logFilePath, &errorMessage); QFile::remove(logFilePath); // Clean-up. diff --git a/src/plugins/clangtools/clangtoolruncontrol.h b/src/plugins/clangtools/clangtoolruncontrol.h index 92ecb5e2b23..2027d9513b1 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.h +++ b/src/plugins/clangtools/clangtoolruncontrol.h @@ -104,6 +104,7 @@ private: QFutureInterface m_progress; AnalyzeUnits m_unitsToProcess; + QSet m_projectFiles; QSet m_runners; int m_initialFilesToProcessSize = 0; int m_filesAnalyzed = 0; diff --git a/src/plugins/clangtools/clangtoolslogfilereader.cpp b/src/plugins/clangtools/clangtoolslogfilereader.cpp index 63751181ee8..76c38f44bec 100644 --- a/src/plugins/clangtools/clangtoolslogfilereader.cpp +++ b/src/plugins/clangtools/clangtoolslogfilereader.cpp @@ -122,7 +122,7 @@ static ExplainingStep buildFixIt(const CXDiagnostic cxDiagnostic, unsigned index } static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &nativeFilePath) { Diagnostic diagnostic; @@ -136,7 +136,7 @@ static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, diagnostic.location = diagLocationFromSourceLocation(cxLocation); const auto diagnosticFilePath = Utils::FilePath::fromString(diagnostic.location.filePath); - if (!diagnosticFilePath.isChildOf(projectRootDir)) + if (!projectFiles.contains(diagnosticFilePath)) return diagnostic; // TODO: Introduce CppTools::ProjectFile::isGenerated to filter these out properly @@ -183,7 +183,7 @@ static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, } static QList readSerializedDiagnostics_helper(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath) { QList list; @@ -206,7 +206,7 @@ static QList readSerializedDiagnostics_helper(const QString &filePat Utils::ExecuteOnDestruction cleanUpDiagnostic([&]() { clang_disposeDiagnostic(cxDiagnostic); }); - const Diagnostic diagnostic = buildDiagnostic(cxDiagnostic, projectRootDir, nativeFilePath); + const Diagnostic diagnostic = buildDiagnostic(cxDiagnostic, projectFiles, nativeFilePath); if (!diagnostic.isValid()) continue; @@ -232,14 +232,14 @@ static bool checkFilePath(const QString &filePath, QString *errorMessage) } QList readSerializedDiagnostics(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath, QString *errorMessage) { if (!checkFilePath(logFilePath, errorMessage)) return QList(); - return readSerializedDiagnostics_helper(filePath, projectRootDir, logFilePath); + return readSerializedDiagnostics_helper(filePath, projectFiles, logFilePath); } } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolslogfilereader.h b/src/plugins/clangtools/clangtoolslogfilereader.h index c95ce645ae9..de37c362b58 100644 --- a/src/plugins/clangtools/clangtoolslogfilereader.h +++ b/src/plugins/clangtools/clangtoolslogfilereader.h @@ -35,7 +35,7 @@ namespace ClangTools { namespace Internal { QList readSerializedDiagnostics(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet &projectFiles, const QString &logFilePath, QString *errorMessage);