forked from qt-creator/qt-creator
Clang: Fix recovering on clangbackend crash
The translation unit was updated, but not re-registered.
Handle the editor documents this way:
1. Reset all ClangEditorDocumentProcessors (this will send an
unregister message, but that's not problematic).
2. For the visible editor documents, run their processors so that the
translation units will be re-registered.
3. For the invisible editor documents, mark them dirty. Once the user
makes an invisible document visible again, the processor will run
and also re-register the translation unit.
Change-Id: I23693ac197bd34a183f3a0020eb5372268636599
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
@@ -476,15 +476,24 @@ void IpcCommunicator::registerCurrentProjectParts()
|
||||
registerProjectsParts(projectInfo.projectParts());
|
||||
}
|
||||
|
||||
void IpcCommunicator::registerCurrentCppEditorDocuments()
|
||||
void IpcCommunicator::restoreCppEditorDocuments()
|
||||
{
|
||||
resetCppEditorDocumentProcessors();
|
||||
registerVisibleCppEditorDocumentAndMarkInvisibleDirty();
|
||||
}
|
||||
|
||||
void IpcCommunicator::resetCppEditorDocumentProcessors()
|
||||
{
|
||||
using namespace CppTools;
|
||||
|
||||
const auto cppEditorDocuments = CppModelManager::instance()->cppEditorDocuments();
|
||||
foreach (const CppEditorDocumentHandle *cppEditorDocument, cppEditorDocuments) {
|
||||
if (cppEditorDocument->processor()->baseTextDocument()->isModified())
|
||||
updateTranslationUnitFromCppEditorDocument(cppEditorDocument->filePath());
|
||||
}
|
||||
foreach (CppEditorDocumentHandle *cppEditorDocument, cppEditorDocuments)
|
||||
cppEditorDocument->resetProcessor();
|
||||
}
|
||||
|
||||
void IpcCommunicator::registerVisibleCppEditorDocumentAndMarkInvisibleDirty()
|
||||
{
|
||||
CppTools::CppModelManager::instance()->updateCppEditorDocuments();
|
||||
}
|
||||
|
||||
void IpcCommunicator::registerCurrentCodeModelUiHeaders()
|
||||
@@ -657,8 +666,8 @@ void IpcCommunicator::initializeBackendWithCurrentData()
|
||||
{
|
||||
registerFallbackProjectPart();
|
||||
registerCurrentProjectParts();
|
||||
registerCurrentCppEditorDocuments();
|
||||
registerCurrentCodeModelUiHeaders();
|
||||
restoreCppEditorDocuments();
|
||||
updateTranslationUnitVisiblity();
|
||||
|
||||
emit backendReinitialized();
|
||||
|
||||
Reference in New Issue
Block a user