From 97f1333cf7d529a1a25dd4d1fbf5b33c55ff5b1f Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 20 Mar 2023 20:01:10 +0100 Subject: [PATCH] CppCurrentDocumentFilter: Avoid using internalData Change-Id: Ic4dc03101f319449ca9835a23c786fbb0528f1c3 Reviewed-by: Christian Kandeler Reviewed-by: Qt CI Bot --- .../cppeditor/cppcurrentdocumentfilter.cpp | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp b/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp index adb1e5d48e3..6c6a568fac9 100644 --- a/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp @@ -53,13 +53,17 @@ void CppCurrentDocumentFilter::makeAuxiliary() QList CppCurrentDocumentFilter::matchesFor( QFutureInterface &future, const QString & entry) { - QList goodEntries; - QList betterEntries; - const QRegularExpression regexp = createRegExp(entry); if (!regexp.isValid()) - return goodEntries; + return {}; + struct Entry + { + LocatorFilterEntry entry; + IndexItem::Ptr info; + }; + QList goodEntries; + QList betterEntries; const QList items = itemsOfCurrentDocument(); for (const IndexItem::Ptr &info : items) { if (future.isCanceled()) @@ -74,7 +78,6 @@ QList CppCurrentDocumentFilter::matchesFor( QRegularExpressionMatch match = regexp.match(matchString); if (match.hasMatch()) { const bool betterMatch = match.capturedStart() == 0; - QVariant id = QVariant::fromValue(info); QString name = matchString; QString extraInfo = info->symbolScope(); if (info->type() == IndexItem::Function) { @@ -84,7 +87,7 @@ QList CppCurrentDocumentFilter::matchesFor( } } - LocatorFilterEntry filterEntry(this, name, id, info->icon()); + LocatorFilterEntry filterEntry(this, name, {}, info->icon()); filterEntry.linkForEditor = {info->filePath(), info->line(), info->column()}; filterEntry.extraInfo = extraInfo; if (match.hasMatch()) { @@ -96,28 +99,26 @@ QList CppCurrentDocumentFilter::matchesFor( } if (betterMatch) - betterEntries.append(filterEntry); + betterEntries.append({filterEntry, info}); else - goodEntries.append(filterEntry); + goodEntries.append({filterEntry, info}); } } // entries are unsorted by design! betterEntries += goodEntries; - QHash> possibleDuplicates; - for (const LocatorFilterEntry &e : std::as_const(betterEntries)) { - const IndexItem::Ptr info = qvariant_cast(e.internalData); - possibleDuplicates[info->scopedSymbolName() + info->symbolType()] << e; - } + QHash> possibleDuplicates; + for (const Entry &e : std::as_const(betterEntries)) + possibleDuplicates[e.info->scopedSymbolName() + e.info->symbolType()] << e; for (auto it = possibleDuplicates.cbegin(); it != possibleDuplicates.cend(); ++it) { - const QList &duplicates = it.value(); + const QList &duplicates = it.value(); if (duplicates.size() == 1) continue; - QList declarations; - QList definitions; - for (const LocatorFilterEntry &candidate : duplicates) { - const IndexItem::Ptr info = qvariant_cast(candidate.internalData); + QList declarations; + QList definitions; + for (const Entry &candidate : duplicates) { + const IndexItem::Ptr info = candidate.info; if (info->type() != IndexItem::Function) break; if (info->isFunctionDefinition()) @@ -127,14 +128,14 @@ QList CppCurrentDocumentFilter::matchesFor( } if (definitions.size() == 1 && declarations.size() + definitions.size() == duplicates.size()) { - for (const LocatorFilterEntry &decl : std::as_const(declarations)) { - Utils::erase(betterEntries, [&decl](const LocatorFilterEntry &e) { - return e.internalData == decl.internalData; + for (const Entry &decl : std::as_const(declarations)) { + Utils::erase(betterEntries, [&decl](const Entry &e) { + return e.info == decl.info; }); } } } - return betterEntries; + return Utils::transform(betterEntries, [](const Entry &entry) { return entry.entry; }); } void CppCurrentDocumentFilter::onDocumentUpdated(Document::Ptr doc)