forked from qt-creator/qt-creator
BaseFileFind: Replace files() with fileContainerProvider()
The fileContainerProvider() is called only once per SearchResult instance, and the result (the provider) is stored inside FileFindParameters. In this way the extra data, like the name filters or the search directory, are set just once. Whenever the search is started (or started again), the stored provider recreates the FileContainer according to the data that has been captured by the lambda when the provider was created. This patch eliminates the need for retrieving the custom data from QVariant. It also eliminates the set of arbitrary arguments for the removed files() method. Remove the BaseFileFind * argument from the SearchEngine::executeSearch() method. Change-Id: I7211f503f82db12b5a99c9d342466daaaae0839f Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -264,8 +264,7 @@ void GitGrep::writeSettings(QSettings *settings) const
|
||||
settings->setValue(GitGrepRef, m_treeLineEdit->text());
|
||||
}
|
||||
|
||||
QFuture<SearchResultItems> GitGrep::executeSearch(const FileFindParameters ¶meters,
|
||||
BaseFileFind *)
|
||||
QFuture<SearchResultItems> GitGrep::executeSearch(const FileFindParameters ¶meters)
|
||||
{
|
||||
return Utils::asyncRun(runGitGrep, parameters);
|
||||
}
|
||||
|
||||
@@ -28,8 +28,7 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
void writeSettings(QSettings *settings) const override;
|
||||
QFuture<Utils::SearchResultItems> executeSearch(
|
||||
const TextEditor::FileFindParameters ¶meters,
|
||||
TextEditor::BaseFileFind *baseFileFind) override;
|
||||
const TextEditor::FileFindParameters ¶meters) override;
|
||||
Core::IEditor *openEditor(const Utils::SearchResultItem &item,
|
||||
const TextEditor::FileFindParameters ¶meters) override;
|
||||
|
||||
|
||||
@@ -47,17 +47,16 @@ bool AllProjectsFind::isEnabled() const
|
||||
return BaseFileFind::isEnabled() && ProjectManager::hasProjects();
|
||||
}
|
||||
|
||||
FileContainer AllProjectsFind::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
FileContainerProvider AllProjectsFind::fileContainerProvider() const
|
||||
{
|
||||
Q_UNUSED(additionalParameters)
|
||||
return [nameFilters = fileNameFilters(), exclusionFilters = fileExclusionFilters()] {
|
||||
return filesForProjects(nameFilters, exclusionFilters, ProjectManager::projects());
|
||||
};
|
||||
}
|
||||
|
||||
FileContainer AllProjectsFind::filesForProjects(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QList<Project *> &projects) const
|
||||
const QList<Project *> &projects)
|
||||
{
|
||||
std::function<FilePaths(const FilePaths &)> filterFiles
|
||||
= Utils::filterFilesFunction(nameFilters, exclusionFilters);
|
||||
|
||||
@@ -30,18 +30,16 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
static Utils::FileContainer filesForProjects(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
Utils::FileContainer filesForProjects(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QList<Project *> &projects) const;
|
||||
const QList<Project *> &projects);
|
||||
|
||||
QVariant additionalParameters() const override;
|
||||
QString label() const override;
|
||||
QString toolTip() const override;
|
||||
|
||||
private:
|
||||
TextEditor::FileContainerProvider fileContainerProvider() const override;
|
||||
void handleFileListChanged();
|
||||
|
||||
QPointer<QWidget> m_configWidget;
|
||||
|
||||
@@ -57,17 +57,22 @@ QVariant CurrentProjectFind::additionalParameters() const
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
FileContainer CurrentProjectFind::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
static FilePath currentProjectFilePath()
|
||||
{
|
||||
QTC_ASSERT(additionalParameters.isValid(), return {});
|
||||
const FilePath projectFile = FilePath::fromVariant(additionalParameters);
|
||||
Project *project = ProjectTree::currentProject();
|
||||
return project ? project->projectFilePath() : FilePath();
|
||||
}
|
||||
|
||||
FileContainerProvider CurrentProjectFind::fileContainerProvider() const
|
||||
{
|
||||
return [nameFilters = fileNameFilters(), exclusionFilters = fileExclusionFilters(),
|
||||
projectFile = currentProjectFilePath()] {
|
||||
for (Project *project : ProjectManager::projects()) {
|
||||
if (project && projectFile == project->projectFilePath())
|
||||
return filesForProjects(nameFilters, exclusionFilters, {project});
|
||||
}
|
||||
return {};
|
||||
return FileContainer();
|
||||
};
|
||||
}
|
||||
|
||||
QString CurrentProjectFind::label() const
|
||||
@@ -85,8 +90,7 @@ void CurrentProjectFind::handleProjectChanged()
|
||||
|
||||
void CurrentProjectFind::setupSearch(Core::SearchResult *search)
|
||||
{
|
||||
Project *project = ProjectTree::currentProject();
|
||||
const FilePath projectFile = project ? project->projectFilePath() : FilePath();
|
||||
const FilePath projectFile = currentProjectFilePath();
|
||||
connect(this, &IFindFilter::enabledChanged, search, [search, projectFile] {
|
||||
const QList<Project *> projects = ProjectManager::projects();
|
||||
for (Project *project : projects) {
|
||||
|
||||
@@ -27,13 +27,11 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
QVariant additionalParameters() const override;
|
||||
QString label() const override;
|
||||
|
||||
private:
|
||||
TextEditor::FileContainerProvider fileContainerProvider() const override;
|
||||
void handleProjectChanged();
|
||||
void setupSearch(Core::SearchResult *search) override;
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <QSettings>
|
||||
|
||||
using namespace TextEditor;
|
||||
using namespace Utils;
|
||||
|
||||
namespace ProjectExplorer {
|
||||
@@ -47,16 +48,15 @@ void FilesInAllProjectsFind::readSettings(QSettings *settings)
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
FileContainer FilesInAllProjectsFind::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
FileContainerProvider FilesInAllProjectsFind::fileContainerProvider() const
|
||||
{
|
||||
Q_UNUSED(additionalParameters)
|
||||
return [nameFilters = fileNameFilters(), exclusionFilters = fileExclusionFilters()] {
|
||||
const QSet<FilePath> dirs = Utils::transform<QSet>(ProjectManager::projects(), [](Project *p) {
|
||||
return p->projectFilePath().parentDir();
|
||||
});
|
||||
return SubDirFileContainer(FilePaths(dirs.constBegin(), dirs.constEnd()), nameFilters,
|
||||
exclusionFilters, Core::EditorManager::defaultTextCodec());
|
||||
};
|
||||
}
|
||||
|
||||
QString FilesInAllProjectsFind::label() const
|
||||
|
||||
@@ -20,9 +20,7 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
TextEditor::FileContainerProvider fileContainerProvider() const override;
|
||||
QString label() const override;
|
||||
};
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ void FindInFilesSilverSearcher::writeSettings(QSettings *settings) const
|
||||
}
|
||||
|
||||
QFuture<SearchResultItems> FindInFilesSilverSearcher::executeSearch(
|
||||
const FileFindParameters ¶meters, BaseFileFind * /*baseFileFind*/)
|
||||
const FileFindParameters ¶meters)
|
||||
{
|
||||
return Utils::asyncRun(runSilverSeacher, parameters);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
void writeSettings(QSettings *settings) const override;
|
||||
QFuture<Utils::SearchResultItems> executeSearch(
|
||||
const TextEditor::FileFindParameters ¶meters, TextEditor::BaseFileFind *) override;
|
||||
const TextEditor::FileFindParameters ¶meters) override;
|
||||
Core::IEditor *openEditor(const Utils::SearchResultItem &item,
|
||||
const TextEditor::FileFindParameters ¶meters) override;
|
||||
|
||||
|
||||
@@ -145,14 +145,10 @@ public:
|
||||
QVariant parameters() const override { return {}; }
|
||||
void readSettings(QSettings * /*settings*/) override {}
|
||||
void writeSettings(QSettings * /*settings*/) const override {}
|
||||
QFuture<SearchResultItems> executeSearch(const TextEditor::FileFindParameters ¶meters,
|
||||
BaseFileFind *baseFileFind) override
|
||||
QFuture<SearchResultItems> executeSearch(const FileFindParameters ¶meters) override
|
||||
{
|
||||
const FileContainer container = baseFileFind->files(parameters.nameFilters,
|
||||
parameters.exclusionFilters,
|
||||
parameters.additionalParameters);
|
||||
return Utils::findInFiles(parameters.text, container, parameters.flags,
|
||||
TextDocument::openedTextDocumentContents());
|
||||
return Utils::findInFiles(parameters.text, parameters.fileContainerProvider(),
|
||||
parameters.flags, TextDocument::openedTextDocumentContents());
|
||||
|
||||
}
|
||||
Core::IEditor *openEditor(const SearchResultItem &/*item*/,
|
||||
@@ -324,6 +320,8 @@ void BaseFileFind::runNewSearch(const QString &txt, FindFlags findFlags,
|
||||
parameters.additionalParameters = additionalParameters();
|
||||
parameters.searchEngineParameters = currentSearchEngine()->parameters();
|
||||
parameters.searchEngineIndex = d->m_currentSearchEngineIndex;
|
||||
parameters.fileContainerProvider = fileContainerProvider();
|
||||
|
||||
search->setUserData(QVariant::fromValue(parameters));
|
||||
connect(search, &SearchResult::activated, this, [this, search](const SearchResultItem &item) {
|
||||
openEditor(search, item);
|
||||
@@ -600,7 +598,7 @@ FilePaths BaseFileFind::replaceAll(const QString &text, const SearchResultItems
|
||||
|
||||
QFuture<SearchResultItems> BaseFileFind::executeSearch(const FileFindParameters ¶meters)
|
||||
{
|
||||
return d->m_searchEngines[parameters.searchEngineIndex]->executeSearch(parameters, this);
|
||||
return d->m_searchEngines[parameters.searchEngineIndex]->executeSearch(parameters);
|
||||
}
|
||||
|
||||
namespace Internal {
|
||||
|
||||
@@ -27,6 +27,8 @@ class BaseFileFindPrivate;
|
||||
class SearchEnginePrivate;
|
||||
} // Internal
|
||||
|
||||
using FileContainerProvider = std::function<Utils::FileContainer()>;
|
||||
|
||||
class TEXTEDITOR_EXPORT FileFindParameters
|
||||
{
|
||||
public:
|
||||
@@ -37,6 +39,7 @@ public:
|
||||
QVariant searchEngineParameters;
|
||||
int searchEngineIndex;
|
||||
Utils::FindFlags flags;
|
||||
FileContainerProvider fileContainerProvider = {};
|
||||
};
|
||||
|
||||
using ProcessSetupHandler = std::function<void(Utils::Process &)>;
|
||||
@@ -65,7 +68,7 @@ public:
|
||||
virtual void readSettings(QSettings *settings) = 0;
|
||||
virtual void writeSettings(QSettings *settings) const = 0;
|
||||
virtual QFuture<Utils::SearchResultItems> executeSearch(
|
||||
const FileFindParameters ¶meters, BaseFileFind *baseFileFind) = 0;
|
||||
const FileFindParameters ¶meters) = 0;
|
||||
virtual Core::IEditor *openEditor(const Utils::SearchResultItem &item,
|
||||
const FileFindParameters ¶meters) = 0;
|
||||
bool isEnabled() const;
|
||||
@@ -95,9 +98,6 @@ public:
|
||||
/* returns the list of unique files that were passed in items */
|
||||
static Utils::FilePaths replaceAll(const QString &txt, const Utils::SearchResultItems &items,
|
||||
bool preserveCase = false);
|
||||
virtual Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const = 0;
|
||||
|
||||
protected:
|
||||
virtual QVariant additionalParameters() const = 0;
|
||||
@@ -121,6 +121,7 @@ signals:
|
||||
void currentSearchEngineChanged();
|
||||
|
||||
private:
|
||||
virtual FileContainerProvider fileContainerProvider() const = 0;
|
||||
void openEditor(Core::SearchResult *result, const Utils::SearchResultItem &item);
|
||||
void doReplace(const QString &txt, const Utils::SearchResultItems &items, bool preserveCase);
|
||||
void hideHighlightAll(bool visible);
|
||||
|
||||
@@ -36,18 +36,15 @@ QString FindInCurrentFile::displayName() const
|
||||
return Tr::tr("Current File");
|
||||
}
|
||||
|
||||
FileContainer FindInCurrentFile::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
FileContainerProvider FindInCurrentFile::fileContainerProvider() const
|
||||
{
|
||||
Q_UNUSED(nameFilters)
|
||||
Q_UNUSED(exclusionFilters)
|
||||
const auto fileName = FilePath::fromVariant(additionalParameters);
|
||||
QMap<FilePath, QTextCodec *> openEditorEncodings = TextDocument::openedTextDocumentEncodings();
|
||||
QTextCodec *codec = openEditorEncodings.value(fileName);
|
||||
return [fileName = m_currentDocument->filePath()] {
|
||||
const QMap<FilePath, QTextCodec *> encodings = TextDocument::openedTextDocumentEncodings();
|
||||
QTextCodec *codec = encodings.value(fileName);
|
||||
if (!codec)
|
||||
codec = Core::EditorManager::defaultTextCodec();
|
||||
return FileListContainer({fileName}, {codec});
|
||||
};
|
||||
}
|
||||
|
||||
QVariant FindInCurrentFile::additionalParameters() const
|
||||
|
||||
@@ -29,14 +29,12 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
QVariant additionalParameters() const override;
|
||||
QString label() const override;
|
||||
QString toolTip() const override;
|
||||
|
||||
private:
|
||||
FileContainerProvider fileContainerProvider() const override;
|
||||
void handleFileChange(Core::IEditor *editor);
|
||||
|
||||
QPointer<Core::IDocument> m_currentDocument;
|
||||
|
||||
@@ -58,12 +58,13 @@ QString FindInFiles::displayName() const
|
||||
return Tr::tr("Files in File System");
|
||||
}
|
||||
|
||||
FileContainer FindInFiles::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
FileContainerProvider FindInFiles::fileContainerProvider() const
|
||||
{
|
||||
return SubDirFileContainer({FilePath::fromVariant(additionalParameters)}, nameFilters,
|
||||
exclusionFilters, EditorManager::defaultTextCodec());
|
||||
return [nameFilters = fileNameFilters(), exclusionFilters = fileExclusionFilters(),
|
||||
filePath = path()] {
|
||||
return SubDirFileContainer({filePath}, nameFilters, exclusionFilters,
|
||||
EditorManager::defaultTextCodec());
|
||||
};
|
||||
}
|
||||
|
||||
QVariant FindInFiles::additionalParameters() const
|
||||
|
||||
@@ -44,15 +44,13 @@ signals:
|
||||
void pathChanged(const Utils::FilePath &directory);
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
QVariant additionalParameters() const override;
|
||||
QString label() const override;
|
||||
QString toolTip() const override;
|
||||
void syncSearchEngineCombo(int selectedSearchEngineIndex) override;
|
||||
|
||||
private:
|
||||
FileContainerProvider fileContainerProvider() const override;
|
||||
void setValid(bool valid);
|
||||
void searchEnginesSelectionChanged(int index);
|
||||
Utils::FilePath path() const;
|
||||
|
||||
@@ -36,15 +36,10 @@ QString FindInOpenFiles::displayName() const
|
||||
return Tr::tr("Open Documents");
|
||||
}
|
||||
|
||||
FileContainer FindInOpenFiles::files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const
|
||||
FileContainerProvider FindInOpenFiles::fileContainerProvider() const
|
||||
{
|
||||
Q_UNUSED(nameFilters)
|
||||
Q_UNUSED(exclusionFilters)
|
||||
Q_UNUSED(additionalParameters)
|
||||
QMap<FilePath, QTextCodec *> openEditorEncodings
|
||||
= TextDocument::openedTextDocumentEncodings();
|
||||
return [] {
|
||||
const QMap<FilePath, QTextCodec *> encodings = TextDocument::openedTextDocumentEncodings();
|
||||
FilePaths fileNames;
|
||||
QList<QTextCodec *> codecs;
|
||||
const QList<Core::DocumentModel::Entry *> entries = Core::DocumentModel::entries();
|
||||
@@ -52,14 +47,14 @@ FileContainer FindInOpenFiles::files(const QStringList &nameFilters,
|
||||
const FilePath fileName = entry->filePath();
|
||||
if (!fileName.isEmpty()) {
|
||||
fileNames.append(fileName);
|
||||
QTextCodec *codec = openEditorEncodings.value(fileName);
|
||||
QTextCodec *codec = encodings.value(fileName);
|
||||
if (!codec)
|
||||
codec = Core::EditorManager::defaultTextCodec();
|
||||
codecs.append(codec);
|
||||
}
|
||||
}
|
||||
|
||||
return FileListContainer(fileNames, codecs);
|
||||
};
|
||||
}
|
||||
|
||||
QVariant FindInOpenFiles::additionalParameters() const
|
||||
|
||||
@@ -22,14 +22,12 @@ public:
|
||||
void readSettings(QSettings *settings) override;
|
||||
|
||||
protected:
|
||||
Utils::FileContainer files(const QStringList &nameFilters,
|
||||
const QStringList &exclusionFilters,
|
||||
const QVariant &additionalParameters) const override;
|
||||
QVariant additionalParameters() const override;
|
||||
QString label() const override;
|
||||
QString toolTip() const override;
|
||||
|
||||
private:
|
||||
FileContainerProvider fileContainerProvider() const override;
|
||||
void updateEnabledState();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user