<div dir="ltr">Hi Miklos,<br><br>This revision broke one of builders:<br><a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/7435">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/7435</a><br><br>Please have a look at it.<br><br>Thanks<br><br>Galina <br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 21, 2016 at 12:48 PM, Miklos Vajna via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: vmiklos<br>
Date: Tue Jun 21 14:48:57 2016<br>
New Revision: 273304<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273304&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273304&view=rev</a><br>
Log:<br>
clang-rename: add a -old-name option<br>
<br>
This is similar to -offset with the following differences:<br>
<br>
1) -offset can refer to local variables as well.<br>
<br>
2) -old-name makes it easier to refer to e.g. ClassName::MemberName by<br>
spelling out the fully qualified name, instead of having to use e.g.<br>
grep to look up the exact offset.<br>
<br>
In other words, -offset is great when clang-rename is invoked by e.g. an<br>
IDE, but not really user-friendly when the tool is invoked by the user<br>
from commandline. That's the use case where -old-name is supposed to<br>
improve the situation.<br>
<br>
Reviewers: klimek<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D21517" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21517</a><br>
<br>
Added:<br>
clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp<br>
Modified:<br>
clang-tools-extra/trunk/clang-rename/USRFinder.cpp<br>
clang-tools-extra/trunk/clang-rename/USRFinder.h<br>
clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp<br>
clang-tools-extra/trunk/clang-rename/USRFindingAction.h<br>
clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp<br>
<br>
Modified: clang-tools-extra/trunk/clang-rename/USRFinder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.cpp?rev=273304&r1=273303&r2=273304&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.cpp?rev=273304&r1=273303&r2=273304&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-rename/USRFinder.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-rename/USRFinder.cpp Tue Jun 21 14:48:57 2016<br>
@@ -40,6 +40,14 @@ public:<br>
Point(Point) {<br>
}<br>
<br>
+ // \brief Finds the NamedDecl for a name in the source.<br>
+ // \param Name the fully qualified name.<br>
+ explicit NamedDeclFindingASTVisitor(const SourceManager &SourceMgr,<br>
+ const std::string &Name)<br>
+ : Result(nullptr), SourceMgr(SourceMgr),<br>
+ Name(Name) {<br>
+ }<br>
+<br>
// Declaration visitors:<br>
<br>
// \brief Checks if the point falls within the NameDecl. This covers every<br>
@@ -93,9 +101,17 @@ private:<br>
// \returns false on success.<br>
bool setResult(const NamedDecl *Decl, SourceLocation Start,<br>
SourceLocation End) {<br>
- if (!Start.isValid() || !Start.isFileID() || !End.isValid() ||<br>
- !End.isFileID() || !isPointWithin(Start, End)) {<br>
- return true;<br>
+ if (Name.empty()) {<br>
+ // Offset is used to find the declaration.<br>
+ if (!Start.isValid() || !Start.isFileID() || !End.isValid() ||<br>
+ !End.isFileID() || !isPointWithin(Start, End)) {<br>
+ return true;<br>
+ }<br>
+ } else {<br>
+ // Fully qualified name is used to find the declaration.<br>
+ if (Name != Decl->getQualifiedNameAsString()) {<br>
+ return true;<br>
+ }<br>
}<br>
Result = Decl;<br>
return false;<br>
@@ -121,6 +137,7 @@ private:<br>
const NamedDecl *Result;<br>
const SourceManager &SourceMgr;<br>
const SourceLocation Point; // The location to find the NamedDecl.<br>
+ const std::string Name;<br>
};<br>
}<br>
<br>
@@ -145,6 +162,22 @@ const NamedDecl *getNamedDeclAt(const AS<br>
}<br>
}<br>
<br>
+ return nullptr;<br>
+}<br>
+<br>
+const NamedDecl *getNamedDeclFor(const ASTContext &Context,<br>
+ const std::string &Name) {<br>
+ const auto &SourceMgr = Context.getSourceManager();<br>
+ NamedDeclFindingASTVisitor Visitor(SourceMgr, Name);<br>
+ auto Decls = Context.getTranslationUnitDecl()->decls();<br>
+<br>
+ for (auto &CurrDecl : Decls) {<br>
+ Visitor.TraverseDecl(CurrDecl);<br>
+ if (const NamedDecl *Result = Visitor.getNamedDecl()) {<br>
+ return Result;<br>
+ }<br>
+ }<br>
+<br>
return nullptr;<br>
}<br>
<br>
<br>
Modified: clang-tools-extra/trunk/clang-rename/USRFinder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.h?rev=273304&r1=273303&r2=273304&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.h?rev=273304&r1=273303&r2=273304&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-rename/USRFinder.h (original)<br>
+++ clang-tools-extra/trunk/clang-rename/USRFinder.h Tue Jun 21 14:48:57 2016<br>
@@ -30,6 +30,12 @@ namespace rename {<br>
const NamedDecl *getNamedDeclAt(const ASTContext &Context,<br>
const SourceLocation Point);<br>
<br>
+// Given an AST context and a fully qualified name, returns a NamedDecl<br>
+// identifying the symbol with a matching name. Returns null if nothing is<br>
+// found for the name.<br>
+const NamedDecl *getNamedDeclFor(const ASTContext &Context,<br>
+ const std::string &Name);<br>
+<br>
// Converts a Decl into a USR.<br>
std::string getUSRForDecl(const Decl *Decl);<br>
<br>
<br>
Modified: clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp?rev=273304&r1=273303&r2=273304&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp?rev=273304&r1=273303&r2=273304&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp Tue Jun 21 14:48:57 2016<br>
@@ -68,7 +68,12 @@ struct NamedDeclFindingConsumer : public<br>
SourceMgr.getMainFileID()).getLocWithOffset(SymbolOffset);<br>
if (!Point.isValid())<br>
return;<br>
- const NamedDecl *FoundDecl = getNamedDeclAt(Context, Point);<br>
+ const NamedDecl *FoundDecl = nullptr;<br>
+ if (OldName.empty()) {<br>
+ FoundDecl = getNamedDeclAt(Context, Point);<br>
+ } else {<br>
+ FoundDecl = getNamedDeclFor(Context, OldName);<br>
+ }<br>
if (FoundDecl == nullptr) {<br>
FullSourceLoc FullLoc(Point, SourceMgr);<br>
errs() << "clang-rename: could not find symbol at "<br>
@@ -96,6 +101,7 @@ struct NamedDeclFindingConsumer : public<br>
}<br>
<br>
unsigned SymbolOffset;<br>
+ std::string OldName;<br>
std::string *SpellingName;<br>
std::vector<std::string> *USRs;<br>
};<br>
@@ -106,6 +112,7 @@ USRFindingAction::newASTConsumer() {<br>
new NamedDeclFindingConsumer);<br>
SpellingName = "";<br>
Consumer->SymbolOffset = SymbolOffset;<br>
+ Consumer->OldName = OldName;<br>
Consumer->USRs = &USRs;<br>
Consumer->SpellingName = &SpellingName;<br>
return std::move(Consumer);<br>
<br>
Modified: clang-tools-extra/trunk/clang-rename/USRFindingAction.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.h?rev=273304&r1=273303&r2=273304&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.h?rev=273304&r1=273303&r2=273304&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-rename/USRFindingAction.h (original)<br>
+++ clang-tools-extra/trunk/clang-rename/USRFindingAction.h Tue Jun 21 14:48:57 2016<br>
@@ -25,7 +25,7 @@ class NamedDecl;<br>
namespace rename {<br>
<br>
struct USRFindingAction {<br>
- USRFindingAction(unsigned Offset) : SymbolOffset(Offset) {<br>
+ USRFindingAction(unsigned Offset, const std::string &Name) : SymbolOffset(Offset), OldName(Name) {<br>
}<br>
std::unique_ptr<ASTConsumer> newASTConsumer();<br>
<br>
@@ -40,6 +40,7 @@ struct USRFindingAction {<br>
<br>
private:<br>
unsigned SymbolOffset;<br>
+ std::string OldName;<br>
std::string SpellingName;<br>
std::vector<std::string> USRs;<br>
};<br>
<br>
Modified: clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp?rev=273304&r1=273303&r2=273304&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp?rev=273304&r1=273303&r2=273304&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp Tue Jun 21 14:48:57 2016<br>
@@ -52,6 +52,11 @@ SymbolOffset(<br>
"offset",<br>
cl::desc("Locates the symbol by offset as opposed to <line>:<column>."),<br>
cl::cat(ClangRenameCategory));<br>
+static cl::opt<std::string><br>
+OldName(<br>
+ "old-name",<br>
+ cl::desc("The fully qualified name of the symbol, if -offset is not used."),<br>
+ cl::cat(ClangRenameCategory));<br>
static cl::opt<bool><br>
Inplace(<br>
"i",<br>
@@ -96,7 +101,7 @@ int main(int argc, const char **argv) {<br>
// Get the USRs.<br>
auto Files = OP.getSourcePathList();<br>
tooling::RefactoringTool Tool(OP.getCompilations(), Files);<br>
- rename::USRFindingAction USRAction(SymbolOffset);<br>
+ rename::USRFindingAction USRAction(SymbolOffset, OldName);<br>
<br>
// Find the USRs.<br>
Tool.run(tooling::newFrontendActionFactory(&USRAction).get());<br>
<br>
Added: clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp?rev=273304&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp?rev=273304&view=auto</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp (added)<br>
+++ clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp Tue Jun 21 14:48:57 2016<br>
@@ -0,0 +1,10 @@<br>
+// RUN: cat %s > %t.cpp<br>
+// RUN: clang-rename -old-name=Cla -new-name=Hector %t.cpp -i --<br>
+// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s<br>
+class Cla { // CHECK: class Hector<br>
+};<br>
+<br>
+int main() {<br>
+ Cla *Pointer = 0; // CHECK: Hector *Pointer = 0;<br>
+ return 0;<br>
+}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>