forked from qt-creator/qt-creator
ClangCodeModel: Prevent outdated fix-its from getting applied
The code locations might no longer be correct. Fixes: QTCREATORBUG-21818 Change-Id: I866a29d2fd63ff65cf33168024f7788c5f6e3547 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -24,6 +24,8 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "clangdiagnostictooltipwidget.h"
|
||||
|
||||
#include "clangdiagnosticmanager.h"
|
||||
#include "clangfixitoperation.h"
|
||||
#include "clangutils.h"
|
||||
|
||||
@@ -101,7 +103,8 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
QWidget *createWidget(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics)
|
||||
QWidget *createWidget(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
|
||||
const ClangDiagnosticManager *diagMgr)
|
||||
{
|
||||
const QString text = htmlText(diagnostics);
|
||||
|
||||
@@ -129,18 +132,22 @@ public:
|
||||
|
||||
const TargetIdToDiagnosticTable table = m_targetIdsToDiagnostics;
|
||||
const bool hideToolTipAfterLinkActivation = m_displayHints.hideTooltipAfterLinkActivation;
|
||||
QObject::connect(label, &QLabel::linkActivated, [table, hideToolTipAfterLinkActivation]
|
||||
(const QString &action) {
|
||||
QObject::connect(label, &QLabel::linkActivated, [table, hideToolTipAfterLinkActivation,
|
||||
diagMgr](const QString &action) {
|
||||
const ClangBackEnd::DiagnosticContainer diagnostic = table.value(action);
|
||||
|
||||
if (diagnostic == ClangBackEnd::DiagnosticContainer())
|
||||
QDesktopServices::openUrl(QUrl(action));
|
||||
else if (action.startsWith(LINK_ACTION_GOTO_LOCATION))
|
||||
else if (action.startsWith(LINK_ACTION_GOTO_LOCATION)) {
|
||||
openEditorAt(diagnostic);
|
||||
else if (action.startsWith(LINK_ACTION_APPLY_FIX))
|
||||
applyFixit(diagnostic);
|
||||
else
|
||||
} else if (action.startsWith(LINK_ACTION_APPLY_FIX)) {
|
||||
if (diagMgr && !diagMgr->diagnosticsInvalidated()
|
||||
&& diagMgr->diagnosticsWithFixIts().contains(diagnostic)) {
|
||||
applyFixit(diagnostic);
|
||||
}
|
||||
} else {
|
||||
QTC_CHECK(!"Link target cannot be handled.");
|
||||
}
|
||||
|
||||
if (hideToolTipAfterLinkActivation)
|
||||
::Utils::ToolTip::hideImmediately();
|
||||
@@ -394,14 +401,15 @@ private:
|
||||
QString m_mainFilePath;
|
||||
};
|
||||
|
||||
WidgetFromDiagnostics::DisplayHints toHints(const ClangDiagnosticWidget::Destination &destination)
|
||||
WidgetFromDiagnostics::DisplayHints toHints(const ClangDiagnosticWidget::Destination &destination,
|
||||
const ClangDiagnosticManager *diagMgr = nullptr)
|
||||
{
|
||||
WidgetFromDiagnostics::DisplayHints hints;
|
||||
|
||||
if (destination == ClangDiagnosticWidget::ToolTip) {
|
||||
hints.showCategoryAndEnableOption = true;
|
||||
hints.showFileNameInMainDiagnostic = false;
|
||||
hints.enableClickableFixits = true;
|
||||
hints.enableClickableFixits = diagMgr && !diagMgr->diagnosticsInvalidated();
|
||||
hints.limitWidth = true;
|
||||
hints.hideTooltipAfterLinkActivation = true;
|
||||
hints.allowTextSelection = false;
|
||||
@@ -438,10 +446,10 @@ QString ClangDiagnosticWidget::createText(
|
||||
return text;
|
||||
}
|
||||
|
||||
QWidget *ClangDiagnosticWidget::createWidget(
|
||||
const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics, const Destination &destination)
|
||||
QWidget *ClangDiagnosticWidget::createWidget(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
|
||||
const Destination &destination, const ClangDiagnosticManager *diagMgr)
|
||||
{
|
||||
return WidgetFromDiagnostics(toHints(destination)).createWidget(diagnostics);
|
||||
return WidgetFromDiagnostics(toHints(destination, diagMgr)).createWidget(diagnostics, diagMgr);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user