aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-07-09 12:42:07 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2019-07-10 07:56:57 +0000
commitb6346369eb9c4b10ea6ca7735b58cd1c6cf73074 (patch)
tree9ee617a7470c92c9ec8807418643de2b74dacbc1 /src
parent2aa067f28e973df757b65830ba6c278ebc03e6e6 (diff)
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')
-rw-r--r--src/plugins/clangtools/clangtidyclazytool.cpp4
-rw-r--r--src/plugins/clangtools/clangtidyclazytool.h2
-rw-r--r--src/plugins/clangtools/clangtool.h2
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.cpp12
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.h1
-rw-r--r--src/plugins/clangtools/clangtoolslogfilereader.cpp12
-rw-r--r--src/plugins/clangtools/clangtoolslogfilereader.h2
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);