diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-07-09 12:42:07 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-07-10 07:56:57 +0000 |
commit | b6346369eb9c4b10ea6ca7735b58cd1c6cf73074 (patch) | |
tree | 9ee617a7470c92c9ec8807418643de2b74dacbc1 /src/plugins/clangtools | |
parent | 2aa067f28e973df757b65830ba6c278ebc03e6e6 (diff) | |
download | qt-creator-b6346369eb9c4b10ea6ca7735b58cd1c6cf73074.tar.gz |
ClangTools: Fix showing diagnostics outside the project root dir
Accept diagnostics from files that are known to the project
(Project::files()) instead of checking whether they are below the
project root directory (Project::projectDirectory()).
Fixes: QTCREATORBUG-22213
Change-Id: I2f96374d6de3f53b1bd42be875dfe44b25a55fb1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/clangtools')
-rw-r--r-- | src/plugins/clangtools/clangtidyclazytool.cpp | 4 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtidyclazytool.h | 2 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtool.h | 2 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolruncontrol.cpp | 12 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolruncontrol.h | 1 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolslogfilereader.cpp | 12 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolslogfilereader.h | 2 |
7 files changed, 15 insertions, 20 deletions
diff --git a/src/plugins/clangtools/clangtidyclazytool.cpp b/src/plugins/clangtools/clangtidyclazytool.cpp index f07fdcd3f7..ec743c9794 100644 --- a/src/plugins/clangtools/clangtidyclazytool.cpp +++ b/src/plugins/clangtools/clangtidyclazytool.cpp @@ -464,11 +464,11 @@ void ClangTidyClazyTool::handleStateUpdate() } QList<Diagnostic> ClangTidyClazyTool::read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath, QString *errorMessage) const { - return readSerializedDiagnostics(filePath, projectRootDir, logFilePath, errorMessage); + return readSerializedDiagnostics(filePath, projectFiles, logFilePath, errorMessage); } void ClangTidyClazyTool::onNewDiagnosticsAvailable(const QList<Diagnostic> &diagnostics) diff --git a/src/plugins/clangtools/clangtidyclazytool.h b/src/plugins/clangtools/clangtidyclazytool.h index c0765dc6a9..1783290538 100644 --- a/src/plugins/clangtools/clangtidyclazytool.h +++ b/src/plugins/clangtools/clangtidyclazytool.h @@ -54,7 +54,7 @@ public: void startTool(bool askUserForFileSelection) final; QList<Diagnostic> read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath, QString *errorMessage) const final; diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index 0f322feb47..1d94719759 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<Diagnostic> read(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath, QString *errorMessage) const = 0; diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index cc8dd24971..6467293417 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<ClangToolRunner *>(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<Diagnostic> 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 92ecb5e2b2..2027d9513b 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.h +++ b/src/plugins/clangtools/clangtoolruncontrol.h @@ -104,6 +104,7 @@ private: QFutureInterface<void> m_progress; AnalyzeUnits m_unitsToProcess; + QSet<Utils::FilePath> m_projectFiles; QSet<ClangToolRunner *> 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 63751181ee..76c38f44be 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<Utils::FilePath> &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<Diagnostic> readSerializedDiagnostics_helper(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath) { QList<Diagnostic> list; @@ -206,7 +206,7 @@ static QList<Diagnostic> 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<Diagnostic> readSerializedDiagnostics(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath, QString *errorMessage) { if (!checkFilePath(logFilePath, errorMessage)) return QList<Diagnostic>(); - 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 c95ce645ae..de37c362b5 100644 --- a/src/plugins/clangtools/clangtoolslogfilereader.h +++ b/src/plugins/clangtools/clangtoolslogfilereader.h @@ -35,7 +35,7 @@ namespace ClangTools { namespace Internal { QList<Diagnostic> readSerializedDiagnostics(const QString &filePath, - const Utils::FilePath &projectRootDir, + const QSet<Utils::FilePath> &projectFiles, const QString &logFilePath, QString *errorMessage); |