summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/builtineditordocumentprocessor.cpp
diff options
context:
space:
mode:
authorFrancois Ferrand <thetypz@gmail.com>2014-09-15 11:13:36 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-10-23 13:39:02 +0200
commit7e544073c0cb2701e5ade0f579f4b6b80d6ec2ec (patch)
tree6478929bf17fec4f9b0423e5f781b301f9a78f20 /src/plugins/cpptools/builtineditordocumentprocessor.cpp
parenta645f78cd69860b57efba4c0a528fec234367327 (diff)
downloadqt-creator-7e544073c0cb2701e5ade0f579f4b6b80d6ec2ec.tar.gz
CppTools: restore C++ diagnostics messages.
The messages were computed, but not added to the document. Change-Id: Ibeea802cf9f291ad14b2fe2e9d2a285c927a4449 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/builtineditordocumentprocessor.cpp')
-rw-r--r--src/plugins/cpptools/builtineditordocumentprocessor.cpp53
1 files changed, 39 insertions, 14 deletions
diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.cpp b/src/plugins/cpptools/builtineditordocumentprocessor.cpp
index 4d8968e304..0474ed45e6 100644
--- a/src/plugins/cpptools/builtineditordocumentprocessor.cpp
+++ b/src/plugins/cpptools/builtineditordocumentprocessor.cpp
@@ -50,15 +50,14 @@ enum { debug = 0 };
namespace {
-QFuture<TextEditor::HighlightingResult> runHighlighter(const CPlusPlus::Document::Ptr &doc,
- const CPlusPlus::Snapshot &snapshot,
- QTextDocument *textDocument)
+CppTools::CheckSymbols * createHighlighter(const CPlusPlus::Document::Ptr &doc,
+ const CPlusPlus::Snapshot &snapshot,
+ QTextDocument *textDocument)
{
- QFuture<TextEditor::HighlightingResult> failed;
- QTC_ASSERT(doc, return failed);
- QTC_ASSERT(doc->translationUnit(), return failed);
- QTC_ASSERT(doc->translationUnit()->ast(), return failed);
- QTC_ASSERT(textDocument, return failed);
+ QTC_ASSERT(doc, return 0);
+ QTC_ASSERT(doc->translationUnit(), return 0);
+ QTC_ASSERT(doc->translationUnit()->ast(), return 0);
+ QTC_ASSERT(textDocument, return 0);
using namespace CPlusPlus;
using namespace CppTools;
@@ -106,7 +105,7 @@ QFuture<TextEditor::HighlightingResult> runHighlighter(const CPlusPlus::Document
}
LookupContext context(doc, snapshot);
- return CheckSymbols::go(doc, context, macroUses);
+ return CheckSymbols::create(doc, context, macroUses);
}
QList<TextEditor::BlockRange> toTextEditorBlocks(
@@ -128,6 +127,7 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
bool enableSemanticHighlighter)
: BaseEditorDocumentProcessor(document)
, m_parser(document->filePath())
+ , m_codeWarningsUpdated(false)
, m_semanticHighlighter(enableSemanticHighlighter
? new CppTools::SemanticHighlighter(document)
: 0)
@@ -141,8 +141,12 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
m_semanticHighlighter->setHighlightingRunner(
[this]() -> QFuture<TextEditor::HighlightingResult> {
const SemanticInfo semanticInfo = m_semanticInfoUpdater.semanticInfo();
- return runHighlighter(semanticInfo.doc, semanticInfo.snapshot,
- baseTextDocument()->document());
+ CheckSymbols *checkSymbols = createHighlighter(semanticInfo.doc, semanticInfo.snapshot,
+ baseTextDocument()->document());
+ QTC_ASSERT(checkSymbols, return QFuture<TextEditor::HighlightingResult>());
+ connect(checkSymbols, &CheckSymbols::codeWarningsUpdated,
+ this, &BuiltinEditorDocumentProcessor::onCodeWarningsUpdated);
+ return checkSymbols->start();
});
}
@@ -206,9 +210,9 @@ void BuiltinEditorDocumentProcessor::onParserFinished(CPlusPlus::Document::Ptr d
const auto ifdefoutBlocks = toTextEditorBlocks(document->skippedBlocks());
emit ifdefedOutBlocksUpdated(revision(), ifdefoutBlocks);
- // Emit code warnings
- auto codeWarnings = toTextEditorSelections(document->diagnosticMessages(), textDocument());
- emit codeWarningsUpdated(revision(), codeWarnings);
+ // Store parser warnings
+ m_codeWarnings = toTextEditorSelections(document->diagnosticMessages(), textDocument());
+ m_codeWarningsUpdated = false;
emit cppDocumentUpdated(document);
@@ -231,6 +235,27 @@ void BuiltinEditorDocumentProcessor::onSemanticInfoUpdated(const SemanticInfo se
m_semanticHighlighter->run();
}
+void BuiltinEditorDocumentProcessor::onCodeWarningsUpdated(
+ CPlusPlus::Document::Ptr document,
+ const QList<CPlusPlus::Document::DiagnosticMessage> &codeWarnings)
+{
+ if (document.isNull())
+ return;
+
+ if (document->fileName() != filePath())
+ return; // some other document got updated
+
+ if (document->editorRevision() != revision())
+ return; // outdated content, wait for a new document to be parsed
+
+ if (m_codeWarningsUpdated)
+ return; // code warnings already updated
+
+ m_codeWarnings += toTextEditorSelections(codeWarnings, textDocument());
+ m_codeWarningsUpdated = true;
+ emit codeWarningsUpdated(revision(), m_codeWarnings);
+}
+
SemanticInfo::Source BuiltinEditorDocumentProcessor::createSemanticInfoSource(bool force) const
{
const WorkingCopy workingCopy = CppTools::CppModelManager::instance()->workingCopy();