LanguageClient: Use document instead of editor opened/closed

Makes sure that the same document is not twice reported as opened to the
language server.

Change-Id: I348b0f4d8f9162e6ba73a4e3292abce146935eca
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2019-03-12 12:46:38 +01:00
parent 2db65630dd
commit dd92ef15c1
2 changed files with 16 additions and 21 deletions

View File

@@ -69,10 +69,10 @@ void LanguageClientManager::init()
using namespace Core; using namespace Core;
using namespace ProjectExplorer; using namespace ProjectExplorer;
QTC_ASSERT(managerInstance, return); QTC_ASSERT(managerInstance, return);
connect(EditorManager::instance(), &EditorManager::editorOpened, connect(EditorManager::instance(), &EditorManager::documentOpened,
managerInstance, &LanguageClientManager::editorOpened); managerInstance, &LanguageClientManager::documentOpened);
connect(EditorManager::instance(), &EditorManager::editorsClosed, connect(EditorManager::instance(), &EditorManager::documentClosed,
managerInstance, &LanguageClientManager::editorsClosed); managerInstance, &LanguageClientManager::documentClosed);
connect(EditorManager::instance(), &EditorManager::saved, connect(EditorManager::instance(), &EditorManager::saved,
managerInstance, &LanguageClientManager::documentContentsSaved); managerInstance, &LanguageClientManager::documentContentsSaved);
connect(EditorManager::instance(), &EditorManager::aboutToSave, connect(EditorManager::instance(), &EditorManager::aboutToSave,
@@ -195,10 +195,9 @@ void LanguageClientManager::clientFinished(Client *client)
} }
} }
void LanguageClientManager::editorOpened(Core::IEditor *iEditor) void LanguageClientManager::documentOpened(Core::IDocument *document)
{ {
using namespace TextEditor; using namespace TextEditor;
Core::IDocument *document = iEditor->document();
for (Client *interface : reachableClients()) for (Client *interface : reachableClients())
interface->openDocument(document); interface->openDocument(document);
@@ -208,28 +207,24 @@ void LanguageClientManager::editorOpened(Core::IEditor *iEditor)
connect(widget, &TextEditorWidget::requestLinkAt, this, connect(widget, &TextEditorWidget::requestLinkAt, this,
[this, filePath = document->filePath()] [this, filePath = document->filePath()]
(const QTextCursor &cursor, Utils::ProcessLinkCallback &callback){ (const QTextCursor &cursor, Utils::ProcessLinkCallback &callback){
findLinkAt(filePath, cursor, callback); findLinkAt(filePath, cursor, callback);
}); });
connect(widget, &TextEditorWidget::requestUsages, this, connect(widget, &TextEditorWidget::requestUsages, this,
[this, filePath = document->filePath()] [this, filePath = document->filePath()]
(const QTextCursor &cursor){ (const QTextCursor &cursor){
findUsages(filePath, cursor); findUsages(filePath, cursor);
}); });
} }
} }
} }
} }
void LanguageClientManager::editorsClosed(const QList<Core::IEditor *> &editors) void LanguageClientManager::documentClosed(Core::IDocument *document)
{ {
for (auto iEditor : editors) { const DidCloseTextDocumentParams params(
if (auto editor = qobject_cast<TextEditor::BaseTextEditor *>(iEditor)) { TextDocumentIdentifier(DocumentUri::fromFileName(document->filePath())));
const DidCloseTextDocumentParams params(TextDocumentIdentifier( for (Client *interface : reachableClients())
DocumentUri::fromFileName(editor->document()->filePath()))); interface->closeDocument(params);
for (Client *interface : reachableClients())
interface->closeDocument(params);
}
}
} }
void LanguageClientManager::documentContentsSaved(Core::IDocument *document) void LanguageClientManager::documentContentsSaved(Core::IDocument *document)

View File

@@ -75,8 +75,8 @@ signals:
private: private:
LanguageClientManager(); LanguageClientManager();
void editorOpened(Core::IEditor *editor); void documentOpened(Core::IDocument *document);
void editorsClosed(const QList<Core::IEditor *> &editors); void documentClosed(Core::IDocument *document);
void documentContentsSaved(Core::IDocument *document); void documentContentsSaved(Core::IDocument *document);
void documentWillSave(Core::IDocument *document); void documentWillSave(Core::IDocument *document);
void findLinkAt(const Utils::FileName &filePath, const QTextCursor &cursor, void findLinkAt(const Utils::FileName &filePath, const QTextCursor &cursor,