forked from qt-creator/qt-creator
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: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user