[clang-tools-extra] 6831c1d - [clangd] Include refs of base method in refs for derived method.
Utkarsh Saxena via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 5 08:39:58 PDT 2021
Author: Utkarsh Saxena
Date: 2021-10-05T17:39:49+02:00
New Revision: 6831c1d8689bebe745aac1fdd7354c2e2f692c1a
URL: https://github.com/llvm/llvm-project/commit/6831c1d8689bebe745aac1fdd7354c2e2f692c1a
DIFF: https://github.com/llvm/llvm-project/commit/6831c1d8689bebe745aac1fdd7354c2e2f692c1a.diff
LOG: [clangd] Include refs of base method in refs for derived method.
Addresses https://github.com/clangd/clangd/issues/881
Includes refs of base class method in refs of derived class method.
Previously we reported base class method's refs only for decl of derived
class method. Ideally this should work for all usages of derived class method.
Related patch:
https://github.com/llvm/llvm-project/commit/fbeff2ec2bc6e44b92931207b0063f83ff7a3b3a.
Differential Revision: https://reviews.llvm.org/D111039
Added:
Modified:
clang-tools-extra/clangd/XRefs.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp
index ea61cba460efc..85c6b7b771fce 100644
--- a/clang-tools-extra/clangd/XRefs.cpp
+++ b/clang-tools-extra/clangd/XRefs.cpp
@@ -1391,13 +1391,11 @@ ReferencesResult findReferences(ParsedAST &AST, Position Pos, uint32_t Limit,
// Special case: For virtual methods, report decl/def of overrides and
// references to all overridden methods in complete type hierarchy.
if (const auto *CMD = llvm::dyn_cast<CXXMethodDecl>(ND)) {
- if (CMD->isVirtual())
- if (IdentifierAtCursor && SM.getSpellingLoc(CMD->getLocation()) ==
- IdentifierAtCursor->location()) {
- if (auto ID = getSymbolID(CMD))
- OverriddenBy.Subjects.insert(ID);
- getOverriddenMethods(CMD, OverriddenMethods);
- }
+ if (CMD->isVirtual()) {
+ if (auto ID = getSymbolID(CMD))
+ OverriddenBy.Subjects.insert(ID);
+ getOverriddenMethods(CMD, OverriddenMethods);
+ }
}
}
}
diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
index e8b64e9200bb5..1f41dcd69913c 100644
--- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -1780,11 +1780,13 @@ void checkFindRefs(llvm::StringRef Test, bool UseIndex = false) {
AllOf(RangeIs(R), AttrsAre(ReferencesResult::Declaration |
ReferencesResult::Definition |
ReferencesResult::Override)));
- EXPECT_THAT(
- findReferences(AST, T.point(), 0, UseIndex ? TU.index().get() : nullptr)
- .References,
- UnorderedElementsAreArray(ExpectedLocations))
- << Test;
+ for (const auto &P : T.points()) {
+ EXPECT_THAT(findReferences(AST, P, 0, UseIndex ? TU.index().get() : nullptr)
+ .References,
+ UnorderedElementsAreArray(ExpectedLocations))
+ << "Failed for Refs at " << P << "\n"
+ << Test;
+ }
}
TEST(FindReferences, WithinAST) {
@@ -1961,7 +1963,7 @@ TEST(FindReferences, IncludeOverrides) {
R"cpp(
class Base {
public:
- virtual void $decl[[f^unc]]() = 0;
+ virtu^al void $decl[[f^unc]]() ^= ^0;
};
class Derived : public Base {
public:
@@ -1990,13 +1992,13 @@ TEST(FindReferences, RefsToBaseMethod) {
};
class Derived : public Base {
public:
- void $decl[[fu^nc]]() override;
+ void $decl[[fu^nc]]() over^ride;
};
void test(BaseBase* BB, Base* B, Derived* D) {
// refs to overridden methods in complete type hierarchy are reported.
BB->[[func]]();
B->[[func]]();
- D->[[func]]();
+ D->[[fu^nc]]();
})cpp";
checkFindRefs(Test, /*UseIndex=*/true);
}
More information about the cfe-commits
mailing list