C++: Fix completion for doxygen tags II

For assist processors that run in a worker thread, the QTextDocument is
recreated with AssistInterface::prepareForAsyncUse and
AssistInterface::recreateTextDocument.

Since some assist processors (C++, QmlJS) rely on the user states of the
QTextBlocks, these must be recreated, too.

In the referenced bug report the lexer state (user state) of the
previous QTextBlock was invalid and thus the "Doxygen tag completion"
failed.

Task-number: QTCREATORBUG-9373
Change-Id: If668e98aa6f9fe9fc107c7476fc831e92a0d7572
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2016-03-30 10:35:17 +02:00
parent 4de62a7349
commit da5309cbc6
3 changed files with 20 additions and 1 deletions

View File

@@ -111,6 +111,8 @@ public:
ExplicitlyInvoked, m_snapshot,
ProjectPartHeaderPaths(),
languageFeatures);
ai->prepareForAsyncUse();
ai->recreateTextDocument();
InternalCppCompletionAssistProcessor processor;
const Tests::IAssistProposalScopedPointer proposal(processor.perform(ai));
@@ -405,6 +407,11 @@ void CppToolsPlugin::test_doxygen_tag_completion_data()
QTest::newRow("C comment single line")
<< _("/*! @ */");
QTest::newRow("C comment multi line")
<< _("/*! text\n"
" * @\n"
" */\n");
}
void CppToolsPlugin::test_doxygen_tag_completion()