diff options
author | Jarek Kobus <[email protected]> | 2022-09-05 19:06:37 +0200 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2022-09-06 07:02:15 +0000 |
commit | a9eb732ce6763e22badd92fc8523cebe84b09a84 (patch) | |
tree | a3af794b4ef6e1d41b356aed31cfa2fd69621d38 | |
parent | b842620810ff2e604ce855167378ff19a7b66dfe (diff) |
FileSearchResult: Use FilePath for fileName
This saves about 2 seconds out of 5 seconds spent in
displayResult() for converting from QString into
FilePath in main thread (use case: gitgrep with
2 million hits).
Change-Id: I6334e8559986501c34c90a5c7c6b4acc9a6953e0
Reviewed-by: <[email protected]>
Reviewed-by: hjk <[email protected]>
-rw-r--r-- | src/libs/utils/filesearch.cpp | 4 | ||||
-rw-r--r-- | src/libs/utils/filesearch.h | 6 | ||||
-rw-r--r-- | src/plugins/git/gitgrep.cpp | 2 | ||||
-rw-r--r-- | src/plugins/silversearcher/silversearcheroutputparser.cpp | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/basefilefind.cpp | 2 | ||||
-rw-r--r-- | tests/auto/filesearch/tst_filesearch.cpp | 22 |
6 files changed, 21 insertions, 17 deletions
diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp index e1ef921b1c3..b2e18050da7 100644 --- a/src/libs/utils/filesearch.cpp +++ b/src/libs/utils/filesearch.cpp @@ -190,7 +190,7 @@ void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterf } if (equal) { const QString resultItemText = clippedText(chunk, MAX_LINE_SIZE); - results << FileSearchResult(item.filePath, + results << FileSearchResult(FilePath::fromString(item.filePath), lineNr, resultItemText, regionPtr - chunkPtr, @@ -268,7 +268,7 @@ void FileSearchRegExp::operator()(QFutureInterface<FileSearchResultList> &future int pos = 0; while ((match = doGuardedMatch(line, pos)).hasMatch()) { pos = match.capturedStart(); - results << FileSearchResult(item.filePath, lineNr, resultItemText, + results << FileSearchResult(FilePath::fromString(item.filePath), lineNr, resultItemText, pos, match.capturedLength(), match.capturedTexts()); if (match.capturedLength() == 0) diff --git a/src/libs/utils/filesearch.h b/src/libs/utils/filesearch.h index dfd3485da3a..70d67b57c6d 100644 --- a/src/libs/utils/filesearch.h +++ b/src/libs/utils/filesearch.h @@ -5,6 +5,8 @@ #include "utils_global.h" +#include "filepath.h" + #include <QDir> #include <QMap> #include <QSet> @@ -153,7 +155,7 @@ class QTCREATOR_UTILS_EXPORT FileSearchResult { public: FileSearchResult() = default; - FileSearchResult(const QString &fileName, int lineNumber, const QString &matchingLine, + FileSearchResult(const FilePath &fileName, int lineNumber, const QString &matchingLine, int matchStart, int matchLength, const QStringList ®expCapturedTexts) : fileName(fileName), @@ -172,7 +174,7 @@ public: } bool operator!=(const FileSearchResult &o) const { return !(*this == o); } - QString fileName; + FilePath fileName; int lineNumber; QString matchingLine; int matchStart; diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index 07345f8b2fa..5acabdfd597 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -85,7 +85,7 @@ public: QString filePath = line.left(lineSeparator); if (!m_ref.isEmpty() && filePath.startsWith(m_ref)) filePath.remove(0, m_ref.length()); - single.fileName = m_directory.pathAppended(filePath).toString(); + single.fileName = m_directory.pathAppended(filePath); const int textSeparator = line.indexOf(QChar::Null, lineSeparator + 1); single.lineNumber = line.mid(lineSeparator + 1, textSeparator - lineSeparator - 1).toInt(); QString text = line.mid(textSeparator + 1); diff --git a/src/plugins/silversearcher/silversearcheroutputparser.cpp b/src/plugins/silversearcher/silversearcheroutputparser.cpp index adaad10b676..19dec6b8010 100644 --- a/src/plugins/silversearcher/silversearcheroutputparser.cpp +++ b/src/plugins/silversearcher/silversearcheroutputparser.cpp @@ -45,7 +45,7 @@ bool SilverSearcherOutputParser::parseFilePath() int startIndex = ++index; while (index < outputSize && output[index] != '\n') ++index; - item.fileName = QString(output.data() + startIndex, index - startIndex); + item.fileName = Utils::FilePath::fromString(QString(output.data() + startIndex, index - startIndex)); ++index; return true; } diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 01aa0f34566..b8a3ab24808 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -227,7 +227,7 @@ static void displayResult(QFutureWatcher<FileSearchResultList> *watcher, QList<SearchResultItem> items; for (const FileSearchResult &result : results) { SearchResultItem item; - item.setFilePath(Utils::FilePath::fromString(result.fileName)); + item.setFilePath(result.fileName); item.setMainRange(result.lineNumber, result.matchStart, result.matchLength); item.setLineText(displayText(result.matchingLine)); item.setUseTextEditorFont(true); diff --git a/tests/auto/filesearch/tst_filesearch.cpp b/tests/auto/filesearch/tst_filesearch.cpp index e92a0644f67..af706acc22b 100644 --- a/tests/auto/filesearch/tst_filesearch.cpp +++ b/tests/auto/filesearch/tst_filesearch.cpp @@ -6,6 +6,8 @@ #include <QTextCodec> #include <QtTest> +using namespace Utils; + class tst_FileSearch : public QObject { Q_OBJECT @@ -50,34 +52,34 @@ namespace { void tst_FileSearch::multipleResults() { Utils::FileSearchResultList expectedResults; - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 2, QLatin1String("search to find multiple find results"), 10, 4, QStringList()); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 2, QLatin1String("search to find multiple find results"), 24, 4, QStringList()); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 4, QLatin1String("here you find another result"), 9, 4, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 2, QLatin1String("search to find multiple find results"), 10, 4, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 2, QLatin1String("search to find multiple find results"), 24, 4, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 4, QLatin1String("here you find another result"), 9, 4, QStringList()); test_helper(expectedResults, QLatin1String("find"), QTextDocument::FindFlags()); expectedResults.clear(); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 0, 4, QStringList()); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 4, 4, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 0, 4, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 4, 4, QStringList()); test_helper(expectedResults, QLatin1String("aaaa"), QTextDocument::FindFlags()); expectedResults.clear(); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 0, 4, QStringList() << QLatin1String("aaaa")); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 4, 4, QStringList() << QLatin1String("aaaa")); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 0, 4, QStringList() << QLatin1String("aaaa")); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 5, QLatin1String("aaaaaaaa this line has 2 results for four a in a row"), 4, 4, QStringList() << QLatin1String("aaaa")); test_helper(expectedResults, QLatin1String("aaaa"), QTextDocument::FindFlags(), RegExp); } void tst_FileSearch::caseSensitive() { Utils::FileSearchResultList expectedResults; - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 7, 13, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 7, 13, QStringList()); test_helper(expectedResults, QLatin1String("CaseSensitive"), QTextDocument::FindCaseSensitively); } void tst_FileSearch::caseInSensitive() { Utils::FileSearchResultList expectedResults; - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 7, 13, QStringList()); - expectedResults << Utils::FileSearchResult(QLatin1String(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 27, 13, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 7, 13, QStringList()); + expectedResults << FileSearchResult(FilePath::fromString(FILENAME), 3, QLatin1String("search CaseSensitively for casesensitive"), 27, 13, QStringList()); test_helper(expectedResults, QLatin1String("CaseSensitive"), QTextDocument::FindFlags()); } |