[PATCH] D110324: clangd: Do not report inline overrides twice
Christian Kandeler via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 23 05:43:11 PDT 2021
ckandeler created this revision.
ckandeler added a reviewer: sammccall.
Herald added subscribers: usaxena95, kadircet, arphaman.
ckandeler requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.
... in textDocument/references.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D110324
Files:
clang-tools-extra/clangd/XRefs.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -1947,6 +1947,9 @@
void $overridedecl[[func]]() override;
};
void Derived::$overridedef[[func]]() {}
+ class Derived2 : public Base {
+ void $overridedef[[func]]() override {}
+ };
void test(Derived* D) {
D->func(); // No references to the overrides.
})cpp";
Index: clang-tools-extra/clangd/XRefs.cpp
===================================================================
--- clang-tools-extra/clangd/XRefs.cpp
+++ clang-tools-extra/clangd/XRefs.cpp
@@ -1431,17 +1431,20 @@
!OverriddenBy.Subjects.empty())
Index->relations(
OverriddenBy, [&](const SymbolID &Subject, const Symbol &Object) {
- if (auto LSPLoc =
- toLSPLocation(Object.CanonicalDeclaration, *MainFilePath)) {
+ const auto LSPLocDecl = toLSPLocation(Object.CanonicalDeclaration,
+ *MainFilePath);
+ const auto LSPLocDef = toLSPLocation(Object.Definition,
+ *MainFilePath);
+ if (LSPLocDecl && LSPLocDecl != LSPLocDef) {
ReferencesResult::Reference Result;
- Result.Loc = std::move(*LSPLoc);
+ Result.Loc = std::move(*LSPLocDecl);
Result.Attributes =
ReferencesResult::Declaration | ReferencesResult::Override;
Results.References.push_back(std::move(Result));
}
- if (auto LSPLoc = toLSPLocation(Object.Definition, *MainFilePath)) {
+ if (LSPLocDef) {
ReferencesResult::Reference Result;
- Result.Loc = std::move(*LSPLoc);
+ Result.Loc = std::move(*LSPLocDef);
Result.Attributes = ReferencesResult::Declaration |
ReferencesResult::Definition |
ReferencesResult::Override;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110324.374517.patch
Type: text/x-patch
Size: 2188 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210923/31c33a04/attachment.bin>
More information about the cfe-commits
mailing list