diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index fde13609b6d..0ad57ffec7e 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -821,7 +821,7 @@ void ClangTool::loadDiagnosticsFromFiles() // Show imported reset(); - onNewDiagnosticsAvailable(diagnostics); + onNewDiagnosticsAvailable(diagnostics, /*generateMarks =*/ true); setState(State::ImportFinished); } @@ -1125,10 +1125,10 @@ QSet ClangTool::diagnostics() const }); } -void ClangTool::onNewDiagnosticsAvailable(const Diagnostics &diagnostics) +void ClangTool::onNewDiagnosticsAvailable(const Diagnostics &diagnostics, bool generateMarks) { QTC_ASSERT(m_diagnosticModel, return); - m_diagnosticModel->addDiagnostics(diagnostics); + m_diagnosticModel->addDiagnostics(diagnostics, generateMarks); } void ClangTool::updateForCurrentState() diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index 7882245e917..a50a068e66c 100644 --- a/src/plugins/clangtools/clangtool.h +++ b/src/plugins/clangtools/clangtool.h @@ -107,7 +107,7 @@ public: const QString &name() const; - void onNewDiagnosticsAvailable(const Diagnostics &diagnostics); + void onNewDiagnosticsAvailable(const Diagnostics &diagnostics, bool generateMarks); QAction *startAction() const { return m_startAction; } QAction *startOnCurrentFileAction() const { return m_startOnCurrentFileAction; } diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 23fce8492b2..4e9c9e2fee9 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -364,8 +364,12 @@ void ClangToolRunWorker::onRunnerFinishedWithSuccess(const QString &filePath) } else { if (!m_filesNotAnalyzed.contains(filePath)) m_filesAnalyzed.insert(filePath); - if (!diagnostics.isEmpty()) - tool()->onNewDiagnosticsAvailable(diagnostics); + if (!diagnostics.isEmpty()) { + // do not generate marks when we always analyze open files since marks from that + // analysis should be more up to date + const bool generateMarks = !m_runSettings.analyzeOpenFiles(); + tool()->onNewDiagnosticsAvailable(diagnostics, generateMarks); + } } handleFinished(); diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp index 59ce1084ef4..28a63e836ba 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp @@ -102,7 +102,7 @@ QDebug operator<<(QDebug debug, const Diagnostic &d) ; } -void ClangToolsDiagnosticModel::addDiagnostics(const Diagnostics &diagnostics) +void ClangToolsDiagnosticModel::addDiagnostics(const Diagnostics &diagnostics, bool generateMarks) { const auto onFixitStatusChanged = [this](const QModelIndex &index, FixitStatus oldStatus, FixitStatus newStatus) { @@ -129,7 +129,7 @@ void ClangToolsDiagnosticModel::addDiagnostics(const Diagnostics &diagnostics) // Add to file path item qCDebug(LOG) << "Adding diagnostic:" << d; - filePathItem->appendChild(new DiagnosticItem(d, onFixitStatusChanged, this)); + filePathItem->appendChild(new DiagnosticItem(d, onFixitStatusChanged, generateMarks, this)); } } @@ -284,11 +284,12 @@ static QString fullText(const Diagnostic &diagnostic) DiagnosticItem::DiagnosticItem(const Diagnostic &diag, const OnFixitStatusChanged &onFixitStatusChanged, + bool generateMark, ClangToolsDiagnosticModel *parent) : m_diagnostic(diag) , m_onFixitStatusChanged(onFixitStatusChanged) , m_parentModel(parent) - , m_mark(new DiagnosticMark(diag)) + , m_mark(generateMark ? new DiagnosticMark(diag) : nullptr) { if (diag.hasFixits) m_fixitStatus = FixitStatus::NotScheduled; diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h index 39bd84dcb65..095d8938353 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h @@ -70,6 +70,7 @@ public: = std::function; DiagnosticItem(const Diagnostic &diag, const OnFixitStatusChanged &onFixitStatusChanged, + bool generateMark, ClangToolsDiagnosticModel *parent); ~DiagnosticItem() override; @@ -112,7 +113,7 @@ class ClangToolsDiagnosticModel : public ClangToolsDiagnosticModelBase public: ClangToolsDiagnosticModel(QObject *parent = nullptr); - void addDiagnostics(const Diagnostics &diagnostics); + void addDiagnostics(const Diagnostics &diagnostics, bool generateMarks); QSet diagnostics() const; enum ItemRole {