[llvm-branch-commits] [cfe-branch] r157016 - /cfe/branches/tooling/examples/rename-method/RenameMethod.cpp
Manuel Klimek
klimek at google.com
Fri May 18 01:15:55 PDT 2012
On Thu, May 17, 2012 at 11:14 PM, Chandler Carruth <chandlerc at gmail.com> wrote:
> Author: chandlerc
> Date: Thu May 17 16:14:15 2012
> New Revision: 157016
>
> URL: http://llvm.org/viewvc/llvm-project?rev=157016&view=rev
> Log:
> Cleanup some whitespace, remove all the windows line endings (I'm looking at
> you Manuel), and implement declaration renaming as well as call renaming.
Sorry & thx. I thought svn was configured to unify line endings?
Cheers,
/Manuel
>
> Modified:
> cfe/branches/tooling/examples/rename-method/RenameMethod.cpp
>
> Modified: cfe/branches/tooling/examples/rename-method/RenameMethod.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/tooling/examples/rename-method/RenameMethod.cpp?rev=157016&r1=157015&r2=157016&view=diff
> ==============================================================================
> --- cfe/branches/tooling/examples/rename-method/RenameMethod.cpp (original)
> +++ cfe/branches/tooling/examples/rename-method/RenameMethod.cpp Thu May 17 16:14:15 2012
> @@ -20,8 +20,8 @@
>
> using namespace clang;
> using namespace clang::ast_matchers;
> -using namespace llvm;
> using namespace clang::tooling;
> +using namespace llvm;
>
> cl::opt<std::string> BuildPath(
> cl::Positional,
> @@ -34,34 +34,66 @@
>
> // Implements a callback that replaces the calls for the AST
> // nodes we matched.
> -class Renamer : public MatchFinder::MatchCallback {
> -public:
> - Renamer(Replacements *Replace) : Replace(Replace) {}
> -
> - // This method is called every time the registered matcher matches
> - // on the AST.
> - virtual void run(const MatchFinder::MatchResult &Result) {
> - const MemberExpr *M = Result.Nodes.getStmtAs<MemberExpr>("member");
> - // We can assume M is non-null, because the ast matchers guarantee
> - // that a node with this type was bound, as the matcher would otherwise
> - // not match.
> -
> - Replace->insert(
> - // Replacements are a source manager independent way to express
> - // transformation on the source.
> - Replacement(*Result.SourceManager,
> - // Replace the range of the member name...
> - CharSourceRange::getTokenRange(
> - SourceRange(M->getMemberLoc())),
> - // ... with "Front".
> - "Front"));
> - }
> -
> -private:
> - // Replacements are the RefactoringTool's way to keep track of code
> - // transformations, deduplicate them and apply them to the code when
> - // the tool has finished with all translation units.
> - Replacements *Replace;
> +class CallRenamer : public MatchFinder::MatchCallback {
> +public:
> + CallRenamer(Replacements *Replace) : Replace(Replace) {}
> +
> + // This method is called every time the registered matcher matches
> + // on the AST.
> + virtual void run(const MatchFinder::MatchResult &Result) {
> + const MemberExpr *M = Result.Nodes.getStmtAs<MemberExpr>("member");
> + // We can assume M is non-null, because the ast matchers guarantee
> + // that a node with this type was bound, as the matcher would otherwise
> + // not match.
> +
> + Replace->insert(
> + // Replacements are a source manager independent way to express
> + // transformation on the source.
> + Replacement(*Result.SourceManager,
> + // Replace the range of the member name...
> + CharSourceRange::getTokenRange(
> + SourceRange(M->getMemberLoc())),
> + // ... with "Front".
> + "Front"));
> + }
> +
> +private:
> + // Replacements are the RefactoringTool's way to keep track of code
> + // transformations, deduplicate them and apply them to the code when
> + // the tool has finished with all translation units.
> + Replacements *Replace;
> +};
> +
> +// Implements a callback that replaces the decls for the AST
> +// nodes we matched.
> +class DeclRenamer : public MatchFinder::MatchCallback {
> +public:
> + DeclRenamer(Replacements *Replace) : Replace(Replace) {}
> +
> + // This method is called every time the registered matcher matches
> + // on the AST.
> + virtual void run(const MatchFinder::MatchResult &Result) {
> + const CXXMethodDecl *D = Result.Nodes.getDeclAs<CXXMethodDecl>("method");
> + // We can assume D is non-null, because the ast matchers guarantee
> + // that a node with this type was bound, as the matcher would otherwise
> + // not match.
> +
> + Replace->insert(
> + // Replacements are a source manager independent way to express
> + // transformation on the source.
> + Replacement(*Result.SourceManager,
> + // Replace the range of the declarator identifier...
> + CharSourceRange::getTokenRange(
> + SourceRange(D->getLocation())),
> + // ... with "Front".
> + "Front"));
> + }
> +
> +private:
> + // Replacements are the RefactoringTool's way to keep track of code
> + // transformations, deduplicate them and apply them to the code when
> + // the tool has finished with all translation units.
> + Replacements *Replace;
> };
>
> int main(int argc, const char **argv) {
> @@ -84,22 +116,30 @@
> if (!Compilations)
> llvm::report_fatal_error(ErrorMessage);
> }
> +
> RefactoringTool Tool(*Compilations, SourcePaths);
> - ast_matchers::MatchFinder Finder;
> - Renamer Callback(&Tool.getReplacements());
> - Finder.addMatcher(
> - // Match calls...
> - Call(
> - // Where the callee is a method called "Get"...
> - Callee(Method(HasName("Get"))),
> - // ... and the class on which the method is called is derived
> - // from ElementsBase ...
> - ThisPointerType(Class(
> - IsDerivedFrom("ElementsBase"))),
> - // ... and bind the member expression to the ID "member", under which
> - // it can later be found in the callback.
> - Callee(Id("member", MemberExpression()))),
> - &Callback);
> -
> + ast_matchers::MatchFinder Finder;
> + CallRenamer CallCallback(&Tool.getReplacements());
> + Finder.addMatcher(
> + // Match calls...
> + Call(
> + // Where the callee is a method called "Get"...
> + Callee(Method(HasName("Get"))),
> + // ... and the class on which the method is called is derived
> + // from ElementsBase ...
> + ThisPointerType(Class(
> + IsDerivedFrom("ElementsBase"))),
> + // ... and bind the member expression to the ID "member", under which
> + // it can later be found in the callback.
> + Callee(Id("member", MemberExpression()))),
> + &CallCallback);
> +
> + DeclRenamer DeclCallback(&Tool.getReplacements());
> + Finder.addMatcher(
> + // Match declarations...
> + Id("method", Method(HasName("Get"),
> + OfClass(IsDerivedFrom("ElementsBase")))),
> + &DeclCallback);
> +
> return Tool.run(newFrontendActionFactory(&Finder));
> }
>
>
> _______________________________________________
> llvm-branch-commits mailing list
> llvm-branch-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-branch-commits
More information about the llvm-branch-commits
mailing list