Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: tools/clang/BindMigrate/Transform.cpp

Issue 7886056: Clang plugin that rewrites PostTask(_, NewRunnableMethod(...)) to PostTask(_, base::Bind(...)); (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix lifetime issue where BindMigrateAction is deleted before the ASTConsumer is finished. Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/clang/BindMigrate/Transform.h ('k') | tools/clang/BindMigrate/Util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/clang/BindMigrate/Transform.cpp
diff --git a/tools/clang/BindMigrate/Transform.cpp b/tools/clang/BindMigrate/Transform.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..710482f7c77e8b28af1f59995af1f6d4761ea6f9
--- /dev/null
+++ b/tools/clang/BindMigrate/Transform.cpp
@@ -0,0 +1,99 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "Transform.h"
+
+#include "clang/Basic/FileManager.h"
+
+namespace clang {
+
+TransformApplier::TransformApplier(const Transform::TransformList& transforms)
+ : transforms_(transforms) {
+}
+
+bool TransformApplier::VisitStmt(Stmt *statement) {
+ for (Transform::TransformList::iterator it = transforms_.begin(),
+ end = transforms_.end(); it != end; ++it) {
+ if ((*it)->WouldTransformStmt(statement)) {
+ (*it)->TransformStmt(statement);
+ }
+ }
+
+ return RecursiveASTVisitor<TransformApplier>::VisitStmt(statement);
+}
+
+bool TransformApplier::VisitDecl(Decl *decl) {
+ for (Transform::TransformList::iterator it = transforms_.begin(),
+ end = transforms_.end(); it != end; ++it) {
+ if ((*it)->WouldTransformDecl(decl)) {
+ (*it)->TransformDecl(decl);
+ }
+ }
+
+ return RecursiveASTVisitor<TransformApplier>::VisitDecl(decl);
+}
+
+bool TransformApplier::VisitType(Type* type) {
+ for (Transform::TransformList::iterator it = transforms_.begin(),
+ end = transforms_.end(); it != end; ++it) {
+ if ((*it)->WouldTransformType(type)) {
+ (*it)->TransformType(type);
+ }
+ }
+
+ return RecursiveASTVisitor<TransformApplier>::VisitType(type);
+}
+
+TransformCandidatePrinter::TransformCandidatePrinter(
+ const Transform::TransformList& transforms,
+ SourceManager* source_manager)
+ : transforms_(transforms),
+ source_manager_(source_manager) {
+}
+
+TransformCandidatePrinter::~TransformCandidatePrinter() {
+ for (std::set<std::string>::const_iterator it = filenames_.begin();
+ it != filenames_.end(); ++it) {
+ llvm::outs() << *it << "\n";
+ }
+}
+
+bool TransformCandidatePrinter::VisitStmt(Stmt *statement) {
+ for (Transform::TransformList::iterator it = transforms_.begin(),
+ end = transforms_.end(); it != end; ++it) {
+ if ((*it)->WouldTransformStmt(statement)) {
+ AddFileForLocation(statement->getLocStart());
+ }
+ }
+
+ return RecursiveASTVisitor<TransformCandidatePrinter>::VisitStmt(
+ statement);
+}
+
+bool TransformCandidatePrinter::VisitDecl(Decl *decl) {
+ for (Transform::TransformList::iterator it = transforms_.begin(),
+ end = transforms_.end(); it != end; ++it) {
+ if ((*it)->WouldTransformDecl(decl)) {
+ AddFileForLocation(decl->getLocStart());
+ }
+ }
+
+ return RecursiveASTVisitor<TransformCandidatePrinter>::VisitDecl(decl);
+}
+
+bool TransformCandidatePrinter::VisitType(Type* type) {
+ // We will find it in Decls and Statements already.
+ return RecursiveASTVisitor<TransformCandidatePrinter>::VisitType(type);
+}
+
+void TransformCandidatePrinter::AddFileForLocation(SourceLocation location) {
+ const FileEntry* file_entry = GetValidFile(*source_manager_, location);
+ if (!file_entry) {
+ return;
+ }
+
+ filenames_.insert(file_entry->getName());
+}
+
+} // namespace clang
« no previous file with comments | « tools/clang/BindMigrate/Transform.h ('k') | tools/clang/BindMigrate/Util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698