diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index 63cd16daf90f265895b8e553b1075e798ad59a56..0e664aee807e66040b1be49362d14b3e5368406d 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -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(); diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.h b/src/plugins/clangcodemodel/clangbackendipcintegration.h index 2f045f2abe26215dd529301c8974031c83ae665b..3d6a299c5175e78337d2f92094696205a63ec961 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.h +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.h @@ -169,7 +169,9 @@ private: void initializeBackend(); void initializeBackendWithCurrentData(); void registerCurrentProjectParts(); - void registerCurrentCppEditorDocuments(); + void restoreCppEditorDocuments(); + void resetCppEditorDocumentProcessors(); + void registerVisibleCppEditorDocumentAndMarkInvisibleDirty(); void registerCurrentCodeModelUiHeaders(); diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 1c4b91ebf0ffb1fd6b44b3b1d230e06d3285caa4..4c10343edacfada27524288aacf2a22394dbe28c 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -91,6 +91,7 @@ public: QFuture<void> updateSourceFiles(const QSet<QString> &sourceFiles, ProgressNotificationMode mode = ReservedProgressNotification); + void updateCppEditorDocuments() const; WorkingCopy workingCopy() const; QByteArray codeModelConfiguration() const; @@ -209,7 +210,6 @@ private: void initializeModelManagerSupports(); void delayedGC(); void recalculateProjectPartMappings(); - void updateCppEditorDocuments() const; void replaceSnapshot(const CPlusPlus::Snapshot &newSnapshot); void removeFilesFromSnapshot(const QSet<QString> &removedFiles);