Commit cbf98ba8 authored by Nikolai Kosjar's avatar Nikolai Kosjar
Browse files

CppEditor: Allow force highlighting if using clang



...so we can rehighlight if it's requested by the editor. This is e.g.
necessary if the font size changes.

Task-number: QTCREATORBUG-11502
Change-Id: I608921899fc37fcf1394db9ff041e6b378196bdd
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent 18e6be55
......@@ -1591,8 +1591,12 @@ bool CPPEditorWidget::openCppEditorAt(const Link &link, bool inNextSplit)
void CPPEditorWidget::semanticRehighlight(bool force)
{
if (m_modelManager)
m_modelManager->cppEditorSupport(editor())->recalculateSemanticInfoDetached(force);
if (m_modelManager) {
const CppEditorSupport::ForceReason forceReason = force
? CppEditorSupport::ForceDueEditorRequest
: CppEditorSupport::NoForce;
m_modelManager->cppEditorSupport(editor())->recalculateSemanticInfoDetached(forceReason);
}
}
void CPPEditorWidget::highlighterStarted(QFuture<TextEditor::HighlightingResult> *highlighter,
......
......@@ -237,7 +237,7 @@ Document::Ptr CppEditorSupport::lastSemanticInfoDocument() const
return m_lastSemanticInfo.doc;
}
void CppEditorSupport::recalculateSemanticInfoDetached(bool force)
void CppEditorSupport::recalculateSemanticInfoDetached(ForceReason forceReason)
{
// Block premature calculation caused by CppEditorPlugin::currentEditorChanged
// when the editor is created.
......@@ -245,12 +245,13 @@ void CppEditorSupport::recalculateSemanticInfoDetached(bool force)
return;
m_futureSemanticInfo.cancel();
const bool force = forceReason != NoForce;
SemanticInfo::Source source = currentSource(force);
m_futureSemanticInfo = QtConcurrent::run<CppEditorSupport, void>(
&CppEditorSupport::recalculateSemanticInfoDetached_helper, this, source);
if (force && m_highlightingSupport && !m_highlightingSupport->requiresSemanticInfo())
startHighlighting();
startHighlighting(forceReason);
}
CppCompletionAssistProvider *CppEditorSupport::completionAssistProvider() const
......@@ -352,14 +353,14 @@ void CppEditorSupport::onDocumentUpdated(Document::Ptr doc)
|| m_lastSemanticInfo.doc->translationUnit()->ast() == 0
|| m_lastSemanticInfo.doc->fileName() != fileName()))) {
m_initialized = true;
recalculateSemanticInfoDetached(/* force = */ true);
recalculateSemanticInfoDetached(ForceDueToMissingSemanticInfo);
}
// notify the editor that the document is updated
emit documentUpdated();
}
void CppEditorSupport::startHighlighting()
void CppEditorSupport::startHighlighting(ForceReason forceReason)
{
if (!m_highlightingSupport)
return;
......@@ -395,8 +396,8 @@ void CppEditorSupport::startHighlighting()
m_lastHighlightOnCompleteSemanticInfo = complete;
emit highlighterStarted(&m_highlighter, m_lastHighlightRevision);
} else {
const unsigned revision = currentSource(false).revision;
if (m_lastHighlightRevision == revision)
const unsigned revision = editorRevision();
if (forceReason != ForceDueEditorRequest && m_lastHighlightRevision == revision)
return;
m_highlighter.cancel();
......
......@@ -119,11 +119,17 @@ public:
CPlusPlus::Document::Ptr lastSemanticInfoDocument() const;
enum ForceReason {
NoForce,
ForceDueToMissingSemanticInfo,
ForceDueEditorRequest
};
/// Recalculates the semantic info in a future, and will emit the
/// semanticInfoUpdated() signal when finished.
/// Requires that initialized() is true.
/// \param force do not check if the old semantic info is still valid
void recalculateSemanticInfoDetached(bool force = false);
/// \param forceReason the reason to force, if any
void recalculateSemanticInfoDetached(ForceReason forceReason);
CppCompletionAssistProvider *completionAssistProvider() const;
......@@ -148,7 +154,7 @@ private slots:
void updateDocumentNow();
void onDocumentUpdated(CPlusPlus::Document::Ptr doc);
void startHighlighting();
void startHighlighting(ForceReason forceReason = NoForce);
void onDiagnosticsChanged();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment