forked from qt-creator/qt-creator
LanguageClient: robustify renaming symbols
Guard against using a symbol support from a deleted client. Additionally cancel active replace operations and provide a sensible error message. Change-Id: I92ca0038fa5f6acbb8369a48c4e8051adfadb30e Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -285,11 +285,9 @@ void SymbolSupport::handleFindReferencesResponse(const FindReferencesRequest::Re
|
|||||||
Core::SearchResult *search = Core::SearchResultWindow::instance()->startNewSearch(
|
Core::SearchResult *search = Core::SearchResultWindow::instance()->startNewSearch(
|
||||||
tr("Find References with %1 for:").arg(m_client->name()), "", wordUnderCursor);
|
tr("Find References with %1 for:").arg(m_client->name()), "", wordUnderCursor);
|
||||||
search->addResults(generateSearchResultItems(*result), Core::SearchResult::AddOrdered);
|
search->addResults(generateSearchResultItems(*result), Core::SearchResult::AddOrdered);
|
||||||
QObject::connect(search,
|
connect(search, &Core::SearchResult::activated, [](const Core::SearchResultItem &item) {
|
||||||
&Core::SearchResult::activated,
|
Core::EditorManager::openEditorAtSearchResult(item);
|
||||||
[](const Core::SearchResultItem &item) {
|
});
|
||||||
Core::EditorManager::openEditorAtSearchResult(item);
|
|
||||||
});
|
|
||||||
search->finishSearch(false);
|
search->finishSearch(false);
|
||||||
search->popup();
|
search->popup();
|
||||||
}
|
}
|
||||||
@@ -493,27 +491,30 @@ Core::SearchResult *SymbolSupport::createSearch(
|
|||||||
const auto extraWidget = new ReplaceWidget;
|
const auto extraWidget = new ReplaceWidget;
|
||||||
search->setAdditionalReplaceWidget(extraWidget);
|
search->setAdditionalReplaceWidget(extraWidget);
|
||||||
|
|
||||||
QObject::connect(search, &Core::SearchResult::activated, [](const Core::SearchResultItem &item) {
|
connect(search, &Core::SearchResult::activated, [](const Core::SearchResultItem &item) {
|
||||||
Core::EditorManager::openEditorAtSearchResult(item);
|
Core::EditorManager::openEditorAtSearchResult(item);
|
||||||
});
|
});
|
||||||
QObject::connect(search, &Core::SearchResult::replaceTextChanged, [search, extraWidget]() {
|
connect(search, &Core::SearchResult::replaceTextChanged, this, [search, extraWidget]() {
|
||||||
extraWidget->showLabel(true);
|
extraWidget->showLabel(true);
|
||||||
search->setUserData(search->userData().toList().first(2));
|
search->setUserData(search->userData().toList().first(2));
|
||||||
search->setSearchAgainEnabled(true);
|
search->setSearchAgainEnabled(true);
|
||||||
search->setReplaceEnabled(false);
|
search->setReplaceEnabled(false);
|
||||||
});
|
});
|
||||||
QObject::connect(search,
|
connect(search, &Core::SearchResult::searchAgainRequested, this,
|
||||||
&Core::SearchResult::searchAgainRequested,
|
[this, positionParams, search]() {
|
||||||
[this, positionParams, search]() {
|
search->restart();
|
||||||
search->restart();
|
requestRename(positionParams, search->textToReplace(), search);
|
||||||
requestRename(positionParams, search->textToReplace(), search);
|
});
|
||||||
});
|
connect(search, &Core::SearchResult::replaceButtonClicked, this,
|
||||||
QObject::connect(search,
|
[this, positionParams, search](const QString & /*replaceText*/,
|
||||||
&Core::SearchResult::replaceButtonClicked,
|
const QList<Core::SearchResultItem> &checkedItems) {
|
||||||
[this, positionParams, search](const QString & /*replaceText*/,
|
applyRename(checkedItems, search);
|
||||||
const QList<Core::SearchResultItem> &checkedItems) {
|
});
|
||||||
applyRename(checkedItems, search);
|
|
||||||
});
|
connect(this, &QObject::destroyed, search, [search, clientName = m_client->name()](){
|
||||||
|
search->restart(); // clears potential current results
|
||||||
|
search->finishSearch(true, tr("%1 is not reachable anymore.").arg(clientName));
|
||||||
|
});
|
||||||
|
|
||||||
return search;
|
return search;
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,7 @@ namespace LanguageClient {
|
|||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
|
|
||||||
class LANGUAGECLIENT_EXPORT SymbolSupport
|
class LANGUAGECLIENT_EXPORT SymbolSupport : public QObject
|
||||||
{
|
{
|
||||||
Q_DECLARE_TR_FUNCTIONS(SymbolSupport)
|
Q_DECLARE_TR_FUNCTIONS(SymbolSupport)
|
||||||
public:
|
public:
|
||||||
|
Reference in New Issue
Block a user