ClangCodeModel: Restart clangd fallback client

... on fallback project part change.

Change-Id: Icfc355443b4d6bb3c94eae27c2d23bbd9f681211
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-10-20 11:41:38 +02:00
parent ea1655881d
commit d7c7089ff3
3 changed files with 23 additions and 8 deletions

View File

@@ -134,6 +134,12 @@ ClangModelManagerSupport::ClangModelManagerSupport()
this, &ClangModelManagerSupport::onProjectPartsUpdated); this, &ClangModelManagerSupport::onProjectPartsUpdated);
connect(modelManager, &CppEditor::CppModelManager::projectPartsRemoved, connect(modelManager, &CppEditor::CppModelManager::projectPartsRemoved,
this, &ClangModelManagerSupport::onProjectPartsRemoved); this, &ClangModelManagerSupport::onProjectPartsRemoved);
connect(modelManager, &CppModelManager::fallbackProjectPartUpdated, this, [this] {
if (ClangdClient * const fallbackClient = clientForProject(nullptr)) {
LanguageClientManager::shutdownClient(fallbackClient);
claimNonProjectSources(createClient(nullptr, {}));
}
});
auto *sessionManager = ProjectExplorer::SessionManager::instance(); auto *sessionManager = ProjectExplorer::SessionManager::instance();
connect(sessionManager, &ProjectExplorer::SessionManager::projectAdded, connect(sessionManager, &ProjectExplorer::SessionManager::projectAdded,

View File

@@ -196,6 +196,7 @@ public:
bool m_enableGC; bool m_enableGC;
QTimer m_delayedGcTimer; QTimer m_delayedGcTimer;
QTimer m_fallbackProjectPartTimer;
// Refactoring // Refactoring
using REHash = QMap<REType, RefactoringEngineInterface *>; using REHash = QMap<REType, RefactoringEngineInterface *>;
@@ -692,12 +693,16 @@ CppModelManager::CppModelManager()
connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose,
this, &CppModelManager::onCoreAboutToClose); this, &CppModelManager::onCoreAboutToClose);
connect(KitManager::instance(), &KitManager::kitsChanged, this, d->m_fallbackProjectPartTimer.setSingleShot(true);
&CppModelManager::setupFallbackProjectPart); d->m_fallbackProjectPartTimer.setInterval(5000);
connect(this, &CppModelManager::projectPartsRemoved, this, connect(&d->m_fallbackProjectPartTimer, &QTimer::timeout,
&CppModelManager::setupFallbackProjectPart); this, &CppModelManager::setupFallbackProjectPart);
connect(this, &CppModelManager::projectPartsUpdated, this, connect(KitManager::instance(), &KitManager::kitsChanged,
&CppModelManager::setupFallbackProjectPart); &d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start));
connect(this, &CppModelManager::projectPartsRemoved,
&d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start));
connect(this, &CppModelManager::projectPartsUpdated,
&d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start));
setupFallbackProjectPart(); setupFallbackProjectPart();
qRegisterMetaType<CPlusPlus::Document::Ptr>("CPlusPlus::Document::Ptr"); qRegisterMetaType<CPlusPlus::Document::Ptr>("CPlusPlus::Document::Ptr");
@@ -1581,8 +1586,11 @@ void CppModelManager::setupFallbackProjectPart()
} }
const auto part = ProjectPart::create({}, rpp, {}, {}, {}, langExtensions, {}, tcInfo); const auto part = ProjectPart::create({}, rpp, {}, {}, {}, langExtensions, {}, tcInfo);
QMutexLocker locker(&d->m_fallbackProjectPartMutex); {
d->m_fallbackProjectPart = part; QMutexLocker locker(&d->m_fallbackProjectPartMutex);
d->m_fallbackProjectPart = part;
}
emit fallbackProjectPartUpdated();
} }
void CppModelManager::GC() void CppModelManager::GC()

View File

@@ -263,6 +263,7 @@ signals:
const QString &sourcePath, const QString &sourcePath,
const QByteArray &contents); const QByteArray &contents);
void abstractEditorSupportRemoved(const QString &filePath); void abstractEditorSupportRemoved(const QString &filePath);
void fallbackProjectPartUpdated();
public slots: public slots:
void updateModifiedSourceFiles(); void updateModifiedSourceFiles();