From b6367b635924e685e80f5f13db1b8be9370cfbf7 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 22 Jun 2021 08:57:36 +0200 Subject: [PATCH] Core: use FilePaths to notify files changed internally Change-Id: I2fce65ad340f18292fc0286233e78aaf769a130d Reviewed-by: hjk --- src/plugins/clangcodemodel/clangdclient.cpp | 7 +++--- src/plugins/coreplugin/documentmanager.cpp | 4 +-- src/plugins/coreplugin/documentmanager.h | 4 +-- src/plugins/coreplugin/vcsmanager.cpp | 7 ++++-- src/plugins/cppeditor/cppeditorwidget.cpp | 6 ++--- src/plugins/cpptools/cppfindreferences.cpp | 7 +++--- src/plugins/cpptools/cppmodelmanager.cpp | 4 +-- .../qmljseditor/qmljsfindreferences.cpp | 12 +++++---- src/plugins/texteditor/basefilefind.cpp | 25 +++++++++---------- src/plugins/texteditor/basefilefind.h | 6 ++--- 10 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 0c95d9e7c23..da875481714 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -899,9 +899,10 @@ void ClangdClient::Private::handleRenameRequest(const SearchResult *search, const QList &checkedItems, bool preserveCase) { - const QStringList fileNames = TextEditor::BaseFileFind::replaceAll(newSymbolName, checkedItems, - preserveCase); - if (!fileNames.isEmpty()) + const Utils::FilePaths filePaths = TextEditor::BaseFileFind::replaceAll(newSymbolName, + checkedItems, + preserveCase); + if (!filePaths.isEmpty()) SearchResultWindow::instance()->hide(); const auto renameFilesCheckBox = qobject_cast(search->additionalReplaceWidget()); diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp index a168c345296..037f54b4efd 100644 --- a/src/plugins/coreplugin/documentmanager.cpp +++ b/src/plugins/coreplugin/documentmanager.cpp @@ -1527,9 +1527,9 @@ void DocumentManager::setFileDialogLastVisitedDirectory(const QString &directory d->m_lastVisitedDirectory = directory; } -void DocumentManager::notifyFilesChangedInternally(const QStringList &files) +void DocumentManager::notifyFilesChangedInternally(const Utils::FilePaths &filePaths) { - emit m_instance->filesChangedInternally(files); + emit m_instance->filesChangedInternally(filePaths); } void DocumentManager::registerSaveAllAction() diff --git a/src/plugins/coreplugin/documentmanager.h b/src/plugins/coreplugin/documentmanager.h index d9b78c47639..d96efd088d7 100644 --- a/src/plugins/coreplugin/documentmanager.h +++ b/src/plugins/coreplugin/documentmanager.h @@ -139,12 +139,12 @@ public: /* Used to notify e.g. the code model to update the given files. Does *not* lead to any editors to reload or any other editor manager actions. */ - static void notifyFilesChangedInternally(const QStringList &files); + static void notifyFilesChangedInternally(const Utils::FilePaths &filePaths); signals: /* Used to notify e.g. the code model to update the given files. Does *not* lead to any editors to reload or any other editor manager actions. */ - void filesChangedInternally(const QStringList &files); + void filesChangedInternally(const Utils::FilePaths &filePaths); /// emitted if all documents changed their name e.g. due to the file changing on disk void allDocumentsRenamed(const Utils::FilePath &from, const Utils::FilePath &to); /// emitted if one document changed its name e.g. due to save as diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index f980fafbd93..f0ce71d45d1 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -173,8 +173,11 @@ void VcsManager::extensionsInitialized() { // Change signal connections foreach (IVersionControl *versionControl, versionControls()) { - connect(versionControl, &IVersionControl::filesChanged, - DocumentManager::instance(), &DocumentManager::filesChangedInternally); + connect(versionControl, &IVersionControl::filesChanged, DocumentManager::instance(), + [](const QStringList fileNames) { + DocumentManager::notifyFilesChangedInternally( + Utils::transform(fileNames, &Utils::FilePath::fromString)); + }); connect(versionControl, &IVersionControl::repositoryChanged, m_instance, &VcsManager::repositoryChanged); connect(versionControl, &IVersionControl::configurationChanged, diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp index ec232f63677..74ae3d5c843 100644 --- a/src/plugins/cppeditor/cppeditorwidget.cpp +++ b/src/plugins/cppeditor/cppeditorwidget.cpp @@ -391,9 +391,9 @@ static void onReplaceUsagesClicked(const QString &text, if (!modelManager) return; - const QStringList fileNames = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); - if (!fileNames.isEmpty()) { - modelManager->updateSourceFiles(Utils::toSet(fileNames)); + const FilePaths filePaths = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); + if (!filePaths.isEmpty()) { + modelManager->updateSourceFiles(Utils::transform(filePaths, &FilePath::toString)); SearchResultWindow::instance()->hide(); } } diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index fe086548be6..9180e7d15ac 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -528,9 +528,10 @@ void CppFindReferences::onReplaceButtonClicked(const QString &text, const QList &items, bool preserveCase) { - const QStringList fileNames = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); - if (!fileNames.isEmpty()) { - m_modelManager->updateSourceFiles(Utils::toSet(fileNames)); + const Utils::FilePaths filePaths = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); + if (!filePaths.isEmpty()) { + m_modelManager->updateSourceFiles( + Utils::transform(filePaths, &Utils::FilePath::toString)); SearchResultWindow::instance()->hide(); } diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 3488571b12e..fbee2cebbd5 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -601,8 +601,8 @@ void CppModelManager::initCppTools() connect(Core::VcsManager::instance(), &Core::VcsManager::repositoryChanged, this, &CppModelManager::updateModifiedSourceFiles); connect(Core::DocumentManager::instance(), &Core::DocumentManager::filesChangedInternally, - [this](const QStringList &files) { - updateSourceFiles(Utils::toSet(files)); + [this](const Utils::FilePaths &filePaths) { + updateSourceFiles(Utils::transform(filePaths, &Utils::FilePath::toString)); }); connect(this, &CppModelManager::documentUpdated, diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index 06afc62d8a5..1acf9638ec1 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -1041,16 +1041,18 @@ void FindReferences::setPaused(bool paused) void FindReferences::onReplaceButtonClicked(const QString &text, const QList &items, bool preserveCase) { - const QStringList fileNames = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); + const Utils::FilePaths filePaths = TextEditor::BaseFileFind::replaceAll(text, + items, + preserveCase); // files that are opened in an editor are changed, but not saved QStringList changedOnDisk; QStringList changedUnsavedEditors; - foreach (const QString &fileName, fileNames) { - if (DocumentModel::documentForFilePath(Utils::FilePath::fromString(fileName))) - changedOnDisk += fileName; + for (const Utils::FilePath &filePath : filePaths) { + if (DocumentModel::documentForFilePath(filePath)) + changedOnDisk += filePath.toString(); else - changedUnsavedEditors += fileName; + changedUnsavedEditors += filePath.toString(); } if (!changedOnDisk.isEmpty()) diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 51da97d2383..2f594021590 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -346,7 +346,7 @@ void BaseFileFind::doReplace(const QString &text, const QList &items, bool preserveCase) { - const QStringList files = replaceAll(text, items, preserveCase); + const FilePaths files = replaceAll(text, items, preserveCase); if (!files.isEmpty()) { Utils::FadingIndicator::showText(ICore::dialogParent(), tr("%n occurrences replaced.", nullptr, items.size()), @@ -485,25 +485,24 @@ void BaseFileFind::recheckEnabled(SearchResult *search) search->setSearchAgainEnabled(isEnabled()); } -QStringList BaseFileFind::replaceAll(const QString &text, - const QList &items, - bool preserveCase) +FilePaths BaseFileFind::replaceAll(const QString &text, + const QList &items, + bool preserveCase) { if (items.isEmpty()) - return QStringList(); + return {}; RefactoringChanges refactoring; - QHash > changes; + QHash > changes; for (const SearchResultItem &item : items) - changes[QDir::fromNativeSeparators(item.path().first())].append(item); + changes[FilePath::fromUserInput(item.path().first())].append(item); // Checking for files without write permissions QSet roFiles; for (auto it = changes.cbegin(), end = changes.cend(); it != end; ++it) { - const QFileInfo fileInfo(it.key()); - if (!fileInfo.isWritable()) - roFiles.insert(FilePath::fromString(it.key())); + if (!it.key().isWritableFile()) + roFiles.insert(it.key()); } // Query the user for permissions @@ -511,15 +510,15 @@ QStringList BaseFileFind::replaceAll(const QString &text, ReadOnlyFilesDialog roDialog(Utils::toList(roFiles), ICore::dialogParent()); roDialog.setShowFailWarning(true, tr("Aborting replace.")); if (roDialog.exec() == ReadOnlyFilesDialog::RO_Cancel) - return QStringList(); + return {}; } for (auto it = changes.cbegin(), end = changes.cend(); it != end; ++it) { - const QString fileName = it.key(); + const FilePath filePath = it.key(); const QList changeItems = it.value(); ChangeSet changeSet; - RefactoringFilePtr file = refactoring.file(FilePath::fromString(fileName)); + RefactoringFilePtr file = refactoring.file(filePath); QSet > processed; for (const SearchResultItem &item : changeItems) { const QPair &p = qMakePair(item.mainRange().begin.line, diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h index 1297e1a2ace..e9929661867 100644 --- a/src/plugins/texteditor/basefilefind.h +++ b/src/plugins/texteditor/basefilefind.h @@ -103,9 +103,9 @@ public: void addSearchEngine(SearchEngine *searchEngine); /* returns the list of unique files that were passed in items */ - static QStringList replaceAll(const QString &txt, - const QList &items, - bool preserveCase = false); + static Utils::FilePaths replaceAll(const QString &txt, + const QList &items, + bool preserveCase = false); virtual Utils::FileIterator *files(const QStringList &nameFilters, const QStringList &exclusionFilters, const QVariant &additionalParameters) const = 0;