[clang-tools-extra] 827f49e - [clangd] Make go-to-def jumps to overriden methods on `final` specifier.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 30 03:49:48 PST 2020
Author: Haojian Wu
Date: 2020-01-30T12:49:30+01:00
New Revision: 827f49e3faf59f99082d0085de06dcbc09be8ba3
URL: https://github.com/llvm/llvm-project/commit/827f49e3faf59f99082d0085de06dcbc09be8ba3
DIFF: https://github.com/llvm/llvm-project/commit/827f49e3faf59f99082d0085de06dcbc09be8ba3.diff
LOG: [clangd] Make go-to-def jumps to overriden methods on `final` specifier.
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73690
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 b302a0d5396c..61dff3e99cae 100644
--- a/clang-tools-extra/clangd/XRefs.cpp
+++ b/clang-tools-extra/clangd/XRefs.cpp
@@ -22,6 +22,7 @@
#include "index/SymbolLocation.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
+#include "clang/AST/Attrs.inc"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclTemplate.h"
@@ -277,7 +278,9 @@ std::vector<LocatedSymbol> locateSymbolAt(ParsedAST &AST, Position Pos,
for (const NamedDecl *D : getDeclAtPosition(AST, SourceLoc, Relations)) {
// Special case: void foo() ^override: jump to the overridden method.
if (const auto *CMD = llvm::dyn_cast<CXXMethodDecl>(D)) {
- const auto *Attr = D->getAttr<OverrideAttr>();
+ const InheritableAttr* Attr = D->getAttr<OverrideAttr>();
+ if (!Attr)
+ Attr = D->getAttr<FinalAttr>();
const syntax::Token *Tok =
spelledIdentifierTouching(SourceLoc, AST.getTokens());
if (Attr && Tok &&
diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
index 348613954a27..226213979b8b 100644
--- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -452,6 +452,11 @@ TEST(LocateSymbol, All) {
class X : Y { void a() ^override {} };
)cpp",
+ R"cpp(// Final specifier jumps to overridden method
+ class Y { virtual void $decl[[a]]() = 0; };
+ class X : Y { void a() ^final {} };
+ )cpp",
+
R"cpp(// Heuristic resolution of dependent method
template <typename T>
struct S {
More information about the cfe-commits
mailing list