aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2022-09-05 19:06:37 +0200
committerJarek Kobus <[email protected]>2022-09-06 07:02:15 +0000
commita9eb732ce6763e22badd92fc8523cebe84b09a84 (patch)
treea3af794b4ef6e1d41b356aed31cfa2fd69621d38
parentb842620810ff2e604ce855167378ff19a7b66dfe (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.cpp4
-rw-r--r--src/libs/utils/filesearch.h6
-rw-r--r--src/plugins/git/gitgrep.cpp2
-rw-r--r--src/plugins/silversearcher/silversearcheroutputparser.cpp2
-rw-r--r--src/plugins/texteditor/basefilefind.cpp2
-rw-r--r--tests/auto/filesearch/tst_filesearch.cpp22
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 &regexpCapturedTexts)
: 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());
}