diff options
| author | Miklos Vajna <vmiklos@vmiklos.hu> | 2016-06-15 18:35:41 +0000 |
|---|---|---|
| committer | Miklos Vajna <vmiklos@vmiklos.hu> | 2016-06-15 18:35:41 +0000 |
| commit | 7712bf3f53e26ffe744536bc8783b80ae5f6f332 (patch) | |
| tree | e458849d51f25278936ad631e1eb35e846a916ba /clang-tools-extra/clang-rename/USRLocFinder.cpp | |
| parent | 41974f1e4da8b210057c2146ea73650544ae100c (diff) | |
| download | bcm5719-llvm-7712bf3f53e26ffe744536bc8783b80ae5f6f332.tar.gz bcm5719-llvm-7712bf3f53e26ffe744536bc8783b80ae5f6f332.zip | |
clang-rename: implement renaming of classes with a dtor
The declaration wasn't renamed. Also neither part of the declaration
wasn't renamed.
Reviewers: klimek
Differential Revision: http://reviews.llvm.org/D21364
llvm-svn: 272816
Diffstat (limited to 'clang-tools-extra/clang-rename/USRLocFinder.cpp')
| -rw-r--r-- | clang-tools-extra/clang-rename/USRLocFinder.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-rename/USRLocFinder.cpp b/clang-tools-extra/clang-rename/USRLocFinder.cpp index a010886474d..fdd3fbcbf8a 100644 --- a/clang-tools-extra/clang-rename/USRLocFinder.cpp +++ b/clang-tools-extra/clang-rename/USRLocFinder.cpp @@ -87,6 +87,28 @@ public: return true; } + bool VisitCXXDestructorDecl(clang::CXXDestructorDecl *DestructorDecl) { + if (getUSRForDecl(DestructorDecl->getParent()) == USR) { + // Handles "~Foo" from "Foo::~Foo". + SourceLocation Location = DestructorDecl->getLocation(); + const ASTContext &Context = DestructorDecl->getASTContext(); + StringRef TokenName = Lexer::getSourceText( + CharSourceRange::getTokenRange(Location), Context.getSourceManager(), + Context.getLangOpts()); + // 1 is the length of the "~" string that is not to be touched by the + // rename. + assert(TokenName.startswith("~")); + LocationsFound.push_back(Location.getLocWithOffset(1)); + + if (DestructorDecl->isThisDeclarationADefinition()) { + // Handles "Foo" from "Foo::~Foo". + LocationsFound.push_back(DestructorDecl->getLocStart()); + } + } + + return true; + } + // Expression visitors: bool VisitDeclRefExpr(const DeclRefExpr *Expr) { |

