diff options
author | Francois Ferrand <thetypz@gmail.com> | 2014-09-15 11:13:36 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-10-23 13:39:02 +0200 |
commit | 7e544073c0cb2701e5ade0f579f4b6b80d6ec2ec (patch) | |
tree | 6478929bf17fec4f9b0423e5f781b301f9a78f20 /src/plugins/cpptools/builtineditordocumentprocessor.cpp | |
parent | a645f78cd69860b57efba4c0a528fec234367327 (diff) | |
download | qt-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.cpp | 53 |
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(); |