CppCurrentDocumentFilter: Avoid using internalData

Change-Id: Ic4dc03101f319449ca9835a23c786fbb0528f1c3
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Jarek Kobus
2023-03-20 20:01:10 +01:00
parent 44074accc7
commit 97f1333cf7

View File

@@ -53,13 +53,17 @@ void CppCurrentDocumentFilter::makeAuxiliary()
QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor( QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor(
QFutureInterface<LocatorFilterEntry> &future, const QString & entry) QFutureInterface<LocatorFilterEntry> &future, const QString & entry)
{ {
QList<LocatorFilterEntry> goodEntries;
QList<LocatorFilterEntry> betterEntries;
const QRegularExpression regexp = createRegExp(entry); const QRegularExpression regexp = createRegExp(entry);
if (!regexp.isValid()) if (!regexp.isValid())
return goodEntries; return {};
struct Entry
{
LocatorFilterEntry entry;
IndexItem::Ptr info;
};
QList<Entry> goodEntries;
QList<Entry> betterEntries;
const QList<IndexItem::Ptr> items = itemsOfCurrentDocument(); const QList<IndexItem::Ptr> items = itemsOfCurrentDocument();
for (const IndexItem::Ptr &info : items) { for (const IndexItem::Ptr &info : items) {
if (future.isCanceled()) if (future.isCanceled())
@@ -74,7 +78,6 @@ QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor(
QRegularExpressionMatch match = regexp.match(matchString); QRegularExpressionMatch match = regexp.match(matchString);
if (match.hasMatch()) { if (match.hasMatch()) {
const bool betterMatch = match.capturedStart() == 0; const bool betterMatch = match.capturedStart() == 0;
QVariant id = QVariant::fromValue(info);
QString name = matchString; QString name = matchString;
QString extraInfo = info->symbolScope(); QString extraInfo = info->symbolScope();
if (info->type() == IndexItem::Function) { if (info->type() == IndexItem::Function) {
@@ -84,7 +87,7 @@ QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor(
} }
} }
LocatorFilterEntry filterEntry(this, name, id, info->icon()); LocatorFilterEntry filterEntry(this, name, {}, info->icon());
filterEntry.linkForEditor = {info->filePath(), info->line(), info->column()}; filterEntry.linkForEditor = {info->filePath(), info->line(), info->column()};
filterEntry.extraInfo = extraInfo; filterEntry.extraInfo = extraInfo;
if (match.hasMatch()) { if (match.hasMatch()) {
@@ -96,28 +99,26 @@ QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor(
} }
if (betterMatch) if (betterMatch)
betterEntries.append(filterEntry); betterEntries.append({filterEntry, info});
else else
goodEntries.append(filterEntry); goodEntries.append({filterEntry, info});
} }
} }
// entries are unsorted by design! // entries are unsorted by design!
betterEntries += goodEntries; betterEntries += goodEntries;
QHash<QString, QList<LocatorFilterEntry>> possibleDuplicates; QHash<QString, QList<Entry>> possibleDuplicates;
for (const LocatorFilterEntry &e : std::as_const(betterEntries)) { for (const Entry &e : std::as_const(betterEntries))
const IndexItem::Ptr info = qvariant_cast<IndexItem::Ptr>(e.internalData); possibleDuplicates[e.info->scopedSymbolName() + e.info->symbolType()] << e;
possibleDuplicates[info->scopedSymbolName() + info->symbolType()] << e;
}
for (auto it = possibleDuplicates.cbegin(); it != possibleDuplicates.cend(); ++it) { for (auto it = possibleDuplicates.cbegin(); it != possibleDuplicates.cend(); ++it) {
const QList<LocatorFilterEntry> &duplicates = it.value(); const QList<Entry> &duplicates = it.value();
if (duplicates.size() == 1) if (duplicates.size() == 1)
continue; continue;
QList<LocatorFilterEntry> declarations; QList<Entry> declarations;
QList<LocatorFilterEntry> definitions; QList<Entry> definitions;
for (const LocatorFilterEntry &candidate : duplicates) { for (const Entry &candidate : duplicates) {
const IndexItem::Ptr info = qvariant_cast<IndexItem::Ptr>(candidate.internalData); const IndexItem::Ptr info = candidate.info;
if (info->type() != IndexItem::Function) if (info->type() != IndexItem::Function)
break; break;
if (info->isFunctionDefinition()) if (info->isFunctionDefinition())
@@ -127,14 +128,14 @@ QList<LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor(
} }
if (definitions.size() == 1 if (definitions.size() == 1
&& declarations.size() + definitions.size() == duplicates.size()) { && declarations.size() + definitions.size() == duplicates.size()) {
for (const LocatorFilterEntry &decl : std::as_const(declarations)) { for (const Entry &decl : std::as_const(declarations)) {
Utils::erase(betterEntries, [&decl](const LocatorFilterEntry &e) { Utils::erase(betterEntries, [&decl](const Entry &e) {
return e.internalData == decl.internalData; return e.info == decl.info;
}); });
} }
} }
} }
return betterEntries; return Utils::transform(betterEntries, [](const Entry &entry) { return entry.entry; });
} }
void CppCurrentDocumentFilter::onDocumentUpdated(Document::Ptr doc) void CppCurrentDocumentFilter::onDocumentUpdated(Document::Ptr doc)