diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/utils/filesearch.cpp | 136 | ||||
-rw-r--r-- | src/libs/utils/filesearch.h | 42 | ||||
-rw-r--r-- | src/plugins/coreplugin/locator/directoryfilter.cpp | 45 | ||||
-rw-r--r-- | src/plugins/coreplugin/locator/directoryfilter.h | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/allprojectsfind.cpp | 29 | ||||
-rw-r--r-- | src/plugins/projectexplorer/currentprojectfind.cpp | 21 | ||||
-rw-r--r-- | src/plugins/projectexplorer/filesinallprojectsfind.cpp | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 5 | ||||
-rw-r--r-- | src/plugins/texteditor/findincurrentfile.cpp | 8 | ||||
-rw-r--r-- | src/plugins/texteditor/findinfiles.cpp | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/findinopenfiles.cpp | 9 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.cpp | 12 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.h | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 8 |
14 files changed, 180 insertions, 156 deletions
diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp index b2e18050da..f91d651627 100644 --- a/src/libs/utils/filesearch.cpp +++ b/src/libs/utils/filesearch.cpp @@ -47,20 +47,19 @@ QString clippedText(const QString &text, int maxLength) } // returns success -bool getFileContent(const QString &filePath, - QTextCodec *encoding, - QString *tempString, - const QMap<QString, QString> &fileToContentsMap) +static bool getFileContent(const FilePath &filePath, + QTextCodec *encoding, + QString *tempString, + const QMap<FilePath, QString> &fileToContentsMap) { if (fileToContentsMap.contains(filePath)) { *tempString = fileToContentsMap.value(filePath); } else { - QFile file(filePath); - if (!file.open(QIODevice::ReadOnly)) + const std::optional<QByteArray> content = filePath.fileContents(); + if (!content) return false; - const QByteArray content = file.readAll(); - *tempString = QTC_GUARD(encoding) ? encoding->toUnicode(content) - : QTextCodec::codecForLocale()->toUnicode(content); + *tempString = QTC_GUARD(encoding) ? encoding->toUnicode(*content) + : QTextCodec::codecForLocale()->toUnicode(*content); } return true; } @@ -68,13 +67,14 @@ bool getFileContent(const QString &filePath, class FileSearch { public: - FileSearch(const QString &searchTerm, QTextDocument::FindFlags flags, - const QMap<QString, QString> &fileToContentsMap); + FileSearch(const QString &searchTerm, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap); void operator()(QFutureInterface<FileSearchResultList> &futureInterface, const FileIterator::Item &item) const; private: - QMap<QString, QString> fileToContentsMap; + QMap<FilePath, QString> fileToContentsMap; QString searchTermLower; QString searchTermUpper; int termMaxIndex; @@ -88,8 +88,9 @@ private: class FileSearchRegExp { public: - FileSearchRegExp(const QString &searchTerm, QTextDocument::FindFlags flags, - const QMap<QString, QString> &fileToContentsMap); + FileSearchRegExp(const QString &searchTerm, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap); FileSearchRegExp(const FileSearchRegExp &other); void operator()(QFutureInterface<FileSearchResultList> &futureInterface, const FileIterator::Item &item) const; @@ -97,13 +98,14 @@ public: private: QRegularExpressionMatch doGuardedMatch(const QString &line, int offset) const; - QMap<QString, QString> fileToContentsMap; + QMap<FilePath, QString> fileToContentsMap; QRegularExpression expression; mutable QMutex mutex; }; -FileSearch::FileSearch(const QString &searchTerm, QTextDocument::FindFlags flags, - const QMap<QString, QString> &fileToContentsMap) +FileSearch::FileSearch(const QString &searchTerm, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap) { this->fileToContentsMap = fileToContentsMap; caseSensitive = (flags & QTextDocument::FindCaseSensitively); @@ -190,7 +192,7 @@ void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterf } if (equal) { const QString resultItemText = clippedText(chunk, MAX_LINE_SIZE); - results << FileSearchResult(FilePath::fromString(item.filePath), + results << FileSearchResult(item.filePath, lineNr, resultItemText, regionPtr - chunkPtr, @@ -212,8 +214,9 @@ void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterf qCDebug(searchLog) << "- finished searching in" << item.filePath; } -FileSearchRegExp::FileSearchRegExp(const QString &searchTerm, QTextDocument::FindFlags flags, - const QMap<QString, QString> &fileToContentsMap) +FileSearchRegExp::FileSearchRegExp(const QString &searchTerm, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap) { this->fileToContentsMap = fileToContentsMap; QString term = searchTerm; @@ -268,9 +271,12 @@ void FileSearchRegExp::operator()(QFutureInterface<FileSearchResultList> &future int pos = 0; while ((match = doGuardedMatch(line, pos)).hasMatch()) { pos = match.capturedStart(); - results << FileSearchResult(FilePath::fromString(item.filePath), lineNr, resultItemText, - pos, match.capturedLength(), - match.capturedTexts()); + results << FileSearchResult(item.filePath, + lineNr, + resultItemText, + pos, + match.capturedLength(), + match.capturedTexts()); if (match.capturedLength() == 0) break; pos += match.capturedLength(); @@ -351,8 +357,10 @@ void cleanUpFileSearch(QFutureInterface<FileSearchResultList> &futureInterface, } // namespace -QFuture<FileSearchResultList> Utils::findInFiles(const QString &searchTerm, FileIterator *files, - QTextDocument::FindFlags flags, const QMap<QString, QString> &fileToContentsMap) +QFuture<FileSearchResultList> Utils::findInFiles(const QString &searchTerm, + FileIterator *files, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap) { return mapReduce(files->begin(), files->end(), [searchTerm, files](QFutureInterface<FileSearchResultList> &futureInterface) { @@ -363,8 +371,11 @@ QFuture<FileSearchResultList> Utils::findInFiles(const QString &searchTerm, File &cleanUpFileSearch); } -QFuture<FileSearchResultList> Utils::findInFilesRegExp(const QString &searchTerm, FileIterator *files, - QTextDocument::FindFlags flags, const QMap<QString, QString> &fileToContentsMap) +QFuture<FileSearchResultList> Utils::findInFilesRegExp( + const QString &searchTerm, + FileIterator *files, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap) { return mapReduce(files->begin(), files->end(), [searchTerm, files](QFutureInterface<FileSearchResultList> &futureInterface) { @@ -471,39 +482,39 @@ static QList<QRegularExpression> filtersToRegExps(const QStringList &filters) }); } -static bool matches(const QList<QRegularExpression> &exprList, const QString &filePath) +static bool matches(const QList<QRegularExpression> &exprList, const FilePath &filePath) { return Utils::anyOf(exprList, [&filePath](const QRegularExpression ®) { - return (reg.match(filePath).hasMatch() - || reg.match(FilePath::fromString(filePath).fileName()).hasMatch()); + return (reg.match(filePath.toString()).hasMatch() + || reg.match(filePath.fileName()).hasMatch()); }); } static bool isFileIncluded(const QList<QRegularExpression> &filterRegs, const QList<QRegularExpression> &exclusionRegs, - const QString &filePath) + const FilePath &filePath) { const bool isIncluded = filterRegs.isEmpty() || matches(filterRegs, filePath); return isIncluded && (exclusionRegs.isEmpty() || !matches(exclusionRegs, filePath)); } -std::function<bool(const QString &)> -filterFileFunction(const QStringList &filters, const QStringList &exclusionFilters) +std::function<bool(const FilePath &)> filterFileFunction(const QStringList &filters, + const QStringList &exclusionFilters) { const QList<QRegularExpression> filterRegs = filtersToRegExps(filters); const QList<QRegularExpression> exclusionRegs = filtersToRegExps(exclusionFilters); - return [filterRegs, exclusionRegs](const QString &filePath) { + return [filterRegs, exclusionRegs](const FilePath &filePath) { return isFileIncluded(filterRegs, exclusionRegs, filePath); }; } -std::function<QStringList(const QStringList &)> -filterFilesFunction(const QStringList &filters, const QStringList &exclusionFilters) +std::function<FilePaths(const FilePaths &)> filterFilesFunction(const QStringList &filters, + const QStringList &exclusionFilters) { const QList<QRegularExpression> filterRegs = filtersToRegExps(filters); const QList<QRegularExpression> exclusionRegs = filtersToRegExps(exclusionFilters); - return [filterRegs, exclusionRegs](const QStringList &filePaths) { - return Utils::filtered(filePaths, [&filterRegs, &exclusionRegs](const QString &filePath) { + return [filterRegs, exclusionRegs](const FilePaths &filePaths) { + return Utils::filtered(filePaths, [&filterRegs, &exclusionRegs](const FilePath &filePath) { return isFileIncluded(filterRegs, exclusionRegs, filePath); }); }; @@ -597,8 +608,7 @@ QTextCodec *encodingAt(const QList<QTextCodec *> &encodings, int index) return QTextCodec::codecForLocale(); } -FileListIterator::FileListIterator(const QStringList &fileList, - const QList<QTextCodec *> encodings) +FileListIterator::FileListIterator(const FilePaths &fileList, const QList<QTextCodec *> encodings) : m_maxIndex(-1) { m_items.reserve(fileList.size()); @@ -638,19 +648,20 @@ namespace { const int MAX_PROGRESS = 1000; } -SubDirFileIterator::SubDirFileIterator(const QStringList &directories, const QStringList &filters, - const QStringList &exclusionFilters, QTextCodec *encoding) - : m_filterFiles(filterFilesFunction(filters, exclusionFilters)), - m_progress(0) +SubDirFileIterator::SubDirFileIterator(const FilePaths &directories, + const QStringList &filters, + const QStringList &exclusionFilters, + QTextCodec *encoding) + : m_filterFiles(filterFilesFunction(filters, exclusionFilters)) + , m_progress(0) { m_encoding = (encoding == nullptr ? QTextCodec::codecForLocale() : encoding); qreal maxPer = qreal(MAX_PROGRESS) / directories.count(); - for (const QString &directoryEntry : directories) { + for (const FilePath &directoryEntry : directories) { if (!directoryEntry.isEmpty()) { - const QDir dir(directoryEntry); - const QString canonicalPath = dir.canonicalPath(); - if (!canonicalPath.isEmpty() && dir.exists()) { - m_dirs.push(dir); + const FilePath canonicalPath = directoryEntry.canonicalPath(); + if (!canonicalPath.isEmpty() && directoryEntry.exists()) { + m_dirs.push(directoryEntry); m_knownDirs.insert(canonicalPath); m_progressValues.push(maxPer); m_processedValues.push(false); @@ -670,31 +681,26 @@ void SubDirFileIterator::update(int index) return; // collect files from the directories until we have enough for the given index while (!m_dirs.isEmpty() && index >= m_items.size()) { - QDir dir = m_dirs.pop(); + FilePath dir = m_dirs.pop(); const qreal dirProgressMax = m_progressValues.pop(); const bool processed = m_processedValues.pop(); if (dir.exists()) { - const QString dirPath = dir.path(); - using Dir = QString; - using CanonicalDir = QString; + using Dir = FilePath; + using CanonicalDir = FilePath; std::vector<std::pair<Dir, CanonicalDir>> subDirs; if (!processed) { - for (const QFileInfo &info : - dir.entryInfoList(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot)) { - const QString canonicalDir = info.canonicalFilePath(); + for (const FilePath &entry : + dir.dirEntries(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot)) { + const FilePath canonicalDir = entry.canonicalPath(); if (!m_knownDirs.contains(canonicalDir)) - subDirs.emplace_back(info.filePath(), canonicalDir); + subDirs.emplace_back(entry, canonicalDir); } } if (subDirs.empty()) { - const QStringList allFileEntries = dir.entryList(QDir::Files|QDir::Hidden); - const QStringList allFilePaths = Utils::transform(allFileEntries, - [&dirPath](const QString &entry) { - return QString(dirPath + '/' + entry); - }); - const QStringList filePaths = m_filterFiles(allFilePaths); + const FilePaths allFilePaths = dir.dirEntries(QDir::Files | QDir::Hidden); + const FilePaths filePaths = m_filterFiles(allFilePaths); m_items.reserve(m_items.size() + filePaths.size()); - Utils::reverseForeach(filePaths, [this](const QString &file) { + Utils::reverseForeach(filePaths, [this](const FilePath &file) { m_items.append(new Item(file, m_encoding)); }); m_progress += dirProgressMax; @@ -705,7 +711,7 @@ void SubDirFileIterator::update(int index) m_processedValues.push(true); Utils::reverseForeach(subDirs, [this, subProgress](const std::pair<Dir, CanonicalDir> &dir) { - m_dirs.push(QDir(dir.first)); + m_dirs.push(dir.first); m_knownDirs.insert(dir.second); m_progressValues.push(subProgress); m_processedValues.push(false); diff --git a/src/libs/utils/filesearch.h b/src/libs/utils/filesearch.h index 70d67b57c6..6c2fad0866 100644 --- a/src/libs/utils/filesearch.h +++ b/src/libs/utils/filesearch.h @@ -24,12 +24,12 @@ QT_END_NAMESPACE namespace Utils { QTCREATOR_UTILS_EXPORT -std::function<bool(const QString &)> -filterFileFunction(const QStringList &filterRegs, const QStringList &exclusionRegs); +std::function<bool(const FilePath &)> filterFileFunction(const QStringList &filterRegs, + const QStringList &exclusionRegs); QTCREATOR_UTILS_EXPORT -std::function<QStringList(const QStringList &)> -filterFilesFunction(const QStringList &filters, const QStringList &exclusionFilters); +std::function<FilePaths(const FilePaths &)> filterFilesFunction(const QStringList &filters, + const QStringList &exclusionFilters); QTCREATOR_UTILS_EXPORT QStringList splitFilterUiText(const QString &text); @@ -50,10 +50,11 @@ public: { public: Item() = default; - Item(const QString &path, QTextCodec *codec) - : filePath(path), encoding(codec) + Item(const FilePath &path, QTextCodec *codec) + : filePath(path) + , encoding(codec) {} - QString filePath; + FilePath filePath; QTextCodec *encoding = nullptr; }; @@ -106,8 +107,7 @@ protected: class QTCREATOR_UTILS_EXPORT FileListIterator : public FileIterator { public: - explicit FileListIterator(const QStringList &fileList, - const QList<QTextCodec *> encodings); + explicit FileListIterator(const FilePaths &fileList, const QList<QTextCodec *> encodings); int maxProgress() const override; int currentProgress() const override; @@ -125,7 +125,7 @@ private: class QTCREATOR_UTILS_EXPORT SubDirFileIterator : public FileIterator { public: - SubDirFileIterator(const QStringList &directories, + SubDirFileIterator(const FilePaths &directories, const QStringList &filters, const QStringList &exclusionFilters, QTextCodec *encoding = nullptr); @@ -140,10 +140,10 @@ protected: const Item &itemAt(int index) const override; private: - std::function<QStringList(const QStringList &)> m_filterFiles; + std::function<FilePaths(const FilePaths &)> m_filterFiles; QTextCodec *m_encoding; - QStack<QDir> m_dirs; - QSet<QString> m_knownDirs; + QStack<FilePath> m_dirs; + QSet<FilePath> m_knownDirs; QStack<qreal> m_progressValues; QStack<bool> m_processedValues; qreal m_progress; @@ -184,11 +184,17 @@ public: using FileSearchResultList = QList<FileSearchResult>; -QTCREATOR_UTILS_EXPORT QFuture<FileSearchResultList> findInFiles(const QString &searchTerm, FileIterator *files, - QTextDocument::FindFlags flags, const QMap<QString, QString> &fileToContentsMap = QMap<QString, QString>()); - -QTCREATOR_UTILS_EXPORT QFuture<FileSearchResultList> findInFilesRegExp(const QString &searchTerm, FileIterator *files, - QTextDocument::FindFlags flags, const QMap<QString, QString> &fileToContentsMap = QMap<QString, QString>()); +QTCREATOR_UTILS_EXPORT QFuture<FileSearchResultList> findInFiles( + const QString &searchTerm, + FileIterator *files, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap = QMap<FilePath, QString>()); + +QTCREATOR_UTILS_EXPORT QFuture<FileSearchResultList> findInFilesRegExp( + const QString &searchTerm, + FileIterator *files, + QTextDocument::FindFlags flags, + const QMap<FilePath, QString> &fileToContentsMap = QMap<FilePath, QString>()); QTCREATOR_UTILS_EXPORT QString expandRegExpReplacement(const QString &replaceText, const QStringList &capturedTexts); QTCREATOR_UTILS_EXPORT QString matchCaseReplacement(const QString &originalText, const QString &replaceText); diff --git a/src/plugins/coreplugin/locator/directoryfilter.cpp b/src/plugins/coreplugin/locator/directoryfilter.cpp index c1dcf9cdff..a1d0e17bfd 100644 --- a/src/plugins/coreplugin/locator/directoryfilter.cpp +++ b/src/plugins/coreplugin/locator/directoryfilter.cpp @@ -57,8 +57,11 @@ void DirectoryFilter::saveState(QJsonObject &object) const if (displayName() != defaultDisplayName()) object.insert(kDisplayNameKey, displayName()); - if (!m_directories.isEmpty()) - object.insert(kDirectoriesKey, QJsonArray::fromStringList(m_directories)); + if (!m_directories.isEmpty()) { + object.insert(kDirectoriesKey, + QJsonArray::fromStringList( + Utils::transform(m_directories, &FilePath::toString))); + } if (m_filters != kFiltersDefault) object.insert(kFiltersKey, QJsonArray::fromStringList(m_filters)); if (!m_files.isEmpty()) @@ -74,11 +77,17 @@ static QStringList toStringList(const QJsonArray &array) return Utils::transform(array.toVariantList(), &QVariant::toString); } +static FilePaths toFilePaths(const QJsonArray &array) +{ + return Utils::transform(array.toVariantList(), + [](const QVariant &v) { return FilePath::fromString(v.toString()); }); +} + void DirectoryFilter::restoreState(const QJsonObject &object) { QMutexLocker locker(&m_lock); setDisplayName(object.value(kDisplayNameKey).toString(defaultDisplayName())); - m_directories = toStringList(object.value(kDirectoriesKey).toArray()); + m_directories = toFilePaths(object.value(kDirectoriesKey).toArray()); m_filters = toStringList( object.value(kFiltersKey).toArray(QJsonArray::fromStringList(kFiltersDefault))); m_files = FileUtils::toFilePathList(toStringList(object.value(kFilesKey).toArray())); @@ -112,8 +121,11 @@ void DirectoryFilter::restoreState(const QByteArray &state) else m_exclusionFilters.clear(); - if (m_isCustomFilter) - m_directories = directories; + if (m_isCustomFilter) { + m_directories = Utils::transform(directories, [](const QString &d) { + return FilePath::fromString(d); + }); + } setDisplayName(name); setShortcutString(shortcut); setIncludedByDefault(defaultFilter); @@ -164,7 +176,7 @@ bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) m_ui->directoryList->clear(); // Note: assuming we only change m_directories in the Gui thread, // we don't need to protect it here with mutex - m_ui->directoryList->addItems(m_directories); + m_ui->directoryList->addItems(Utils::transform(m_directories, &FilePath::toString)); m_ui->nameLabel->setVisible(m_isCustomFilter); m_ui->nameEdit->setVisible(m_isCustomFilter); m_ui->directoryLabel->setVisible(m_isCustomFilter); @@ -192,7 +204,7 @@ bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) if (dialog.exec() == QDialog::Accepted) { QMutexLocker locker(&m_lock); bool directoriesChanged = false; - const QStringList oldDirectories = m_directories; + const FilePaths oldDirectories = m_directories; const QStringList oldFilters = m_filters; const QStringList oldExclusionFilters = m_exclusionFilters; setDisplayName(m_ui->nameEdit->text().trimmed()); @@ -202,7 +214,7 @@ bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) if (oldCount != newCount) directoriesChanged = true; for (int i = 0; i < newCount; ++i) { - m_directories.append(m_ui->directoryList->item(i)->text()); + m_directories.append(FilePath::fromString(m_ui->directoryList->item(i)->text())); if (!directoriesChanged && m_directories.at(i) != oldDirectories.at(i)) directoriesChanged = true; } @@ -258,7 +270,8 @@ void DirectoryFilter::updateFileIterator() void DirectoryFilter::refresh(QFutureInterface<void> &future) { - QStringList directories, filters, exclusionFilters; + FilePaths directories; + QStringList filters, exclusionFilters; { QMutexLocker locker(&m_lock); if (m_directories.isEmpty()) { @@ -280,7 +293,7 @@ void DirectoryFilter::refresh(QFutureInterface<void> &future) for (auto it = subDirIterator.begin(); it != end; ++it) { if (future.isCanceled()) break; - filesFound << Utils::FilePath::fromString((*it).filePath); + filesFound << (*it).filePath; if (future.isProgressUpdateNeeded() || future.progressValue() == 0 /*workaround for regression in Qt*/) { future.setProgressValueAndText(subDirIterator.currentProgress(), @@ -303,7 +316,7 @@ void DirectoryFilter::setIsCustomFilter(bool value) m_isCustomFilter = value; } -void DirectoryFilter::setDirectories(const QStringList &directories) +void DirectoryFilter::setDirectories(const FilePaths &directories) { if (directories == m_directories) return; @@ -314,19 +327,19 @@ void DirectoryFilter::setDirectories(const QStringList &directories) Internal::Locator::instance()->refresh({this}); } -void DirectoryFilter::addDirectory(const QString &directory) +void DirectoryFilter::addDirectory(const FilePath &directory) { - setDirectories(m_directories + QStringList(directory)); + setDirectories(m_directories + FilePaths{directory}); } -void DirectoryFilter::removeDirectory(const QString &directory) +void DirectoryFilter::removeDirectory(const FilePath &directory) { - QStringList directories = m_directories; + FilePaths directories = m_directories; directories.removeOne(directory); setDirectories(directories); } -QStringList DirectoryFilter::directories() const +FilePaths DirectoryFilter::directories() const { return m_directories; } diff --git a/src/plugins/coreplugin/locator/directoryfilter.h b/src/plugins/coreplugin/locator/directoryfilter.h index b3b06768d4..a0fa5da09c 100644 --- a/src/plugins/coreplugin/locator/directoryfilter.h +++ b/src/plugins/coreplugin/locator/directoryfilter.h @@ -30,10 +30,10 @@ public: void refresh(QFutureInterface<void> &future) override; void setIsCustomFilter(bool value); - void setDirectories(const QStringList &directories); - void addDirectory(const QString &directory); - void removeDirectory(const QString &directory); - QStringList directories() const; + void setDirectories(const Utils::FilePaths &directories); + void addDirectory(const Utils::FilePath &directory); + void removeDirectory(const Utils::FilePath &directory); + Utils::FilePaths directories() const; void setFilters(const QStringList &filters); void setExclusionFilters(const QStringList &exclusionFilters); @@ -48,7 +48,7 @@ private: void updateOptionButtons(); void updateFileIterator(); - QStringList m_directories; + Utils::FilePaths m_directories; QStringList m_filters; QStringList m_exclusionFilters; // Our config dialog, uses in addDirectory and editDirectory diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp index f53f177519..a7fa9649b7 100644 --- a/src/plugins/projectexplorer/allprojectsfind.cpp +++ b/src/plugins/projectexplorer/allprojectsfind.cpp @@ -21,6 +21,7 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; using namespace TextEditor; +using namespace Utils; AllProjectsFind::AllProjectsFind() : m_configWidget(nullptr) { @@ -43,37 +44,37 @@ bool AllProjectsFind::isEnabled() const return BaseFileFind::isEnabled() && SessionManager::hasProjects(); } -Utils::FileIterator *AllProjectsFind::files(const QStringList &nameFilters, - const QStringList &exclusionFilters, - const QVariant &additionalParameters) const +FileIterator *AllProjectsFind::files(const QStringList &nameFilters, + const QStringList &exclusionFilters, + const QVariant &additionalParameters) const { Q_UNUSED(additionalParameters) return filesForProjects(nameFilters, exclusionFilters, SessionManager::projects()); } -Utils::FileIterator *AllProjectsFind::filesForProjects(const QStringList &nameFilters, - const QStringList &exclusionFilters, - const QList<Project *> &projects) const +FileIterator *AllProjectsFind::filesForProjects(const QStringList &nameFilters, + const QStringList &exclusionFilters, + const QList<Project *> &projects) const { - std::function<QStringList(const QStringList &)> filterFiles = - Utils::filterFilesFunction(nameFilters, exclusionFilters); - const QMap<QString, QTextCodec *> openEditorEncodings = TextDocument::openedTextDocumentEncodings(); - QMap<QString, QTextCodec *> encodings; + std::function<FilePaths(const FilePaths &)> filterFiles + = Utils::filterFilesFunction(nameFilters, exclusionFilters); + const QMap<FilePath, QTextCodec *> openEditorEncodings + = TextDocument::openedTextDocumentEncodings(); + QMap<FilePath, QTextCodec *> encodings; for (const Project *project : projects) { const EditorConfiguration *config = project->editorConfiguration(); QTextCodec *projectCodec = config->useGlobalSettings() ? Core::EditorManager::defaultTextCodec() : config->textCodec(); - const QStringList filteredFiles = filterFiles( - Utils::transform(project->files(Project::SourceFiles), &Utils::FilePath::toString)); - for (const QString &fileName : filteredFiles) { + const FilePaths filteredFiles = filterFiles(project->files(Project::SourceFiles)); + for (const FilePath &fileName : filteredFiles) { QTextCodec *codec = openEditorEncodings.value(fileName); if (!codec) codec = projectCodec; encodings.insert(fileName, codec); } } - return new Utils::FileListIterator(encodings.keys(), encodings.values()); + return new FileListIterator(encodings.keys(), encodings.values()); } QVariant AllProjectsFind::additionalParameters() const diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp index ada992f32d..6b957cb72f 100644 --- a/src/plugins/projectexplorer/currentprojectfind.cpp +++ b/src/plugins/projectexplorer/currentprojectfind.cpp @@ -16,6 +16,7 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; using namespace TextEditor; +using namespace Utils; CurrentProjectFind::CurrentProjectFind() { @@ -51,22 +52,22 @@ QVariant CurrentProjectFind::additionalParameters() const { Project *project = ProjectTree::currentProject(); if (project) - return QVariant::fromValue(project->projectFilePath().toString()); + return project->projectFilePath().toVariant(); return QVariant(); } -Utils::FileIterator *CurrentProjectFind::files(const QStringList &nameFilters, - const QStringList &exclusionFilters, - const QVariant &additionalParameters) const +FileIterator *CurrentProjectFind::files(const QStringList &nameFilters, + const QStringList &exclusionFilters, + const QVariant &additionalParameters) const { QTC_ASSERT(additionalParameters.isValid(), - return new Utils::FileListIterator(QStringList(), QList<QTextCodec *>())); - QString projectFile = additionalParameters.toString(); + return new FileListIterator(FilePaths(), QList<QTextCodec *>())); + const FilePath projectFile = FilePath::fromVariant(additionalParameters); for (Project *project : SessionManager::projects()) { - if (project && projectFile == project->projectFilePath().toString()) + if (project && projectFile == project->projectFilePath()) return filesForProjects(nameFilters, exclusionFilters, {project}); } - return new Utils::FileListIterator(QStringList(), QList<QTextCodec *>()); + return new FileListIterator(FilePaths(), QList<QTextCodec *>()); } QString CurrentProjectFind::label() const @@ -84,9 +85,9 @@ void CurrentProjectFind::handleProjectChanged() void CurrentProjectFind::recheckEnabled(Core::SearchResult *search) { - QString projectFile = getAdditionalParameters(search).toString(); + const FilePath projectFile = FilePath::fromVariant(getAdditionalParameters(search)); for (Project *project : SessionManager::projects()) { - if (projectFile == project->projectFilePath().toString()) { + if (projectFile == project->projectFilePath()) { search->setSearchAgainEnabled(true); return; } diff --git a/src/plugins/projectexplorer/filesinallprojectsfind.cpp b/src/plugins/projectexplorer/filesinallprojectsfind.cpp index 340aa5710e..423d78e0af 100644 --- a/src/plugins/projectexplorer/filesinallprojectsfind.cpp +++ b/src/plugins/projectexplorer/filesinallprojectsfind.cpp @@ -54,8 +54,7 @@ Utils::FileIterator *FilesInAllProjectsFind::files(const QStringList &nameFilter const QSet<FilePath> dirs = Utils::transform<QSet>(SessionManager::projects(), [](Project *p) { return p->projectFilePath().parentDir(); }); - const QStringList dirStrings = Utils::transform<QStringList>(dirs, &FilePath::toString); - return new SubDirFileIterator(dirStrings, + return new SubDirFileIterator(FilePaths(dirs.constBegin(), dirs.constEnd()), nameFilters, exclusionFilters, Core::EditorManager::defaultTextCodec()); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 7c828fd4c9..b4807b62a0 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -867,14 +867,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er dd, &ProjectExplorerPluginPrivate::loadSesssionTasks); connect(sessionManager, &SessionManager::projectAdded, dd, [](ProjectExplorer::Project *project) { - dd->m_allProjectDirectoriesFilter.addDirectory(project->projectDirectory().toString()); + dd->m_allProjectDirectoriesFilter.addDirectory(project->projectDirectory()); }); connect(sessionManager, &SessionManager::projectRemoved, dd, [](ProjectExplorer::Project *project) { - dd->m_allProjectDirectoriesFilter.removeDirectory( - project->projectDirectory().toString()); + dd->m_allProjectDirectoriesFilter.removeDirectory(project->projectDirectory()); }); ProjectTree *tree = &dd->m_projectTree; diff --git a/src/plugins/texteditor/findincurrentfile.cpp b/src/plugins/texteditor/findincurrentfile.cpp index 9fb33ff3af..5f667bab68 100644 --- a/src/plugins/texteditor/findincurrentfile.cpp +++ b/src/plugins/texteditor/findincurrentfile.cpp @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "findincurrentfile.h" -#include "texteditor.h" #include "textdocument.h" #include <utils/filesearch.h> @@ -39,8 +38,9 @@ Utils::FileIterator *FindInCurrentFile::files(const QStringList &nameFilters, { Q_UNUSED(nameFilters) Q_UNUSED(exclusionFilters) - QString fileName = additionalParameters.toString(); - QMap<QString, QTextCodec *> openEditorEncodings = TextDocument::openedTextDocumentEncodings(); + const auto fileName = Utils::FilePath::fromVariant(additionalParameters); + QMap<Utils::FilePath, QTextCodec *> openEditorEncodings + = TextDocument::openedTextDocumentEncodings(); QTextCodec *codec = openEditorEncodings.value(fileName); if (!codec) codec = Core::EditorManager::defaultTextCodec(); @@ -49,7 +49,7 @@ Utils::FileIterator *FindInCurrentFile::files(const QStringList &nameFilters, QVariant FindInCurrentFile::additionalParameters() const { - return QVariant::fromValue(m_currentDocument->filePath().toString()); + return m_currentDocument->filePath().toVariant(); } QString FindInCurrentFile::label() const diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp index 879248747c..7793498f65 100644 --- a/src/plugins/texteditor/findinfiles.cpp +++ b/src/plugins/texteditor/findinfiles.cpp @@ -59,7 +59,7 @@ FileIterator *FindInFiles::files(const QStringList &nameFilters, const QStringList &exclusionFilters, const QVariant &additionalParameters) const { - return new SubDirFileIterator({additionalParameters.toString()}, + return new SubDirFileIterator({FilePath::fromVariant(additionalParameters)}, nameFilters, exclusionFilters, EditorManager::defaultTextCodec()); @@ -67,7 +67,7 @@ FileIterator *FindInFiles::files(const QStringList &nameFilters, QVariant FindInFiles::additionalParameters() const { - return QVariant::fromValue(path().toString()); + return path().toVariant(); } QString FindInFiles::label() const diff --git a/src/plugins/texteditor/findinopenfiles.cpp b/src/plugins/texteditor/findinopenfiles.cpp index a5e7ff67ee..f66e89b95f 100644 --- a/src/plugins/texteditor/findinopenfiles.cpp +++ b/src/plugins/texteditor/findinopenfiles.cpp @@ -3,7 +3,6 @@ #include "findinopenfiles.h" #include "textdocument.h" -#include "texteditor.h" #include <utils/filesearch.h> #include <coreplugin/icore.h> @@ -40,13 +39,13 @@ Utils::FileIterator *FindInOpenFiles::files(const QStringList &nameFilters, Q_UNUSED(nameFilters) Q_UNUSED(exclusionFilters) Q_UNUSED(additionalParameters) - QMap<QString, QTextCodec *> openEditorEncodings - = TextDocument::openedTextDocumentEncodings(); - QStringList fileNames; + QMap<Utils::FilePath, QTextCodec *> openEditorEncodings + = TextDocument::openedTextDocumentEncodings(); + Utils::FilePaths fileNames; QList<QTextCodec *> codecs; const QList<Core::DocumentModel::Entry *> entries = Core::DocumentModel::entries(); for (Core::DocumentModel::Entry *entry : entries) { - QString fileName = entry->fileName().toString(); + const Utils::FilePath fileName = entry->fileName(); if (!fileName.isEmpty()) { fileNames.append(fileName); QTextCodec *codec = openEditorEncodings.value(fileName); diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index d866041d2c..51f805f396 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -235,29 +235,29 @@ TextDocument::~TextDocument() delete d; } -QMap<QString, QString> TextDocument::openedTextDocumentContents() +QMap<FilePath, QString> TextDocument::openedTextDocumentContents() { - QMap<QString, QString> workingCopy; + QMap<FilePath, QString> workingCopy; const QList<IDocument *> documents = DocumentModel::openedDocuments(); for (IDocument *document : documents) { auto textEditorDocument = qobject_cast<TextDocument *>(document); if (!textEditorDocument) continue; - QString fileName = textEditorDocument->filePath().toString(); + const FilePath fileName = textEditorDocument->filePath(); workingCopy[fileName] = textEditorDocument->plainText(); } return workingCopy; } -QMap<QString, QTextCodec *> TextDocument::openedTextDocumentEncodings() +QMap<FilePath, QTextCodec *> TextDocument::openedTextDocumentEncodings() { - QMap<QString, QTextCodec *> workingCopy; + QMap<FilePath, QTextCodec *> workingCopy; const QList<IDocument *> documents = DocumentModel::openedDocuments(); for (IDocument *document : documents) { auto textEditorDocument = qobject_cast<TextDocument *>(document); if (!textEditorDocument) continue; - QString fileName = textEditorDocument->filePath().toString(); + const FilePath fileName = textEditorDocument->filePath(); workingCopy[fileName] = const_cast<QTextCodec *>(textEditorDocument->codec()); } return workingCopy; diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index e3f8f6c8e7..fbddd84384 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -49,8 +49,8 @@ public: explicit TextDocument(Utils::Id id = Utils::Id()); ~TextDocument() override; - static QMap<QString, QString> openedTextDocumentContents(); - static QMap<QString, QTextCodec *> openedTextDocumentEncodings(); + static QMap<Utils::FilePath, QString> openedTextDocumentContents(); + static QMap<Utils::FilePath, QTextCodec *> openedTextDocumentEncodings(); static TextDocument *currentTextDocument(); static TextDocument *textDocumentForFilePath(const Utils::FilePath &filePath); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 22585ae6b3..dc29c62246 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -864,8 +864,8 @@ void TextEditorWidgetFind::selectAll(const QString &txt, FindFlags findFlags) m_editor->setFocus(); }); - const QString &fileName = m_editor->textDocument()->filePath().toString(); - QMap<QString, QString> fileToContentsMap; + const FilePath &fileName = m_editor->textDocument()->filePath(); + QMap<FilePath, QString> fileToContentsMap; fileToContentsMap[fileName] = m_editor->textDocument()->plainText(); FileListIterator *it = new FileListIterator({fileName}, @@ -6368,10 +6368,10 @@ void TextEditorWidgetPrivate::highlightSearchResultsInScrollBar() const QTextDocument::FindFlags findFlags = textDocumentFlagsForFindFlags(m_findFlags); - const QString &fileName = m_document->filePath().toString(); + const FilePath &fileName = m_document->filePath(); FileListIterator *it = new FileListIterator({fileName} , {const_cast<QTextCodec *>(m_document->codec())}); - QMap<QString, QString> fileToContentsMap; + QMap<FilePath, QString> fileToContentsMap; fileToContentsMap[fileName] = m_document->plainText(); if (m_findFlags & FindRegularExpression) |