|  | // Copyright 2015 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. | 
|  |  | 
|  | #ifndef TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ | 
|  | #define TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "clang/AST/AST.h" | 
|  | #include "clang/AST/RecursiveASTVisitor.h" | 
|  |  | 
|  | // This visitor collects the entry points for the checker. | 
|  | class CollectVisitor : public clang::RecursiveASTVisitor<CollectVisitor> { | 
|  | public: | 
|  | typedef std::vector<clang::CXXRecordDecl*> RecordVector; | 
|  | typedef std::vector<clang::CXXMethodDecl*> MethodVector; | 
|  |  | 
|  | CollectVisitor(); | 
|  |  | 
|  | RecordVector& record_decls(); | 
|  | MethodVector& trace_decls(); | 
|  |  | 
|  | // Collect record declarations, including nested declarations. | 
|  | bool VisitCXXRecordDecl(clang::CXXRecordDecl* record); | 
|  |  | 
|  | // Collect tracing method definitions, but don't traverse method bodies. | 
|  | bool VisitCXXMethodDecl(clang::CXXMethodDecl* method); | 
|  |  | 
|  | private: | 
|  | RecordVector record_decls_; | 
|  | MethodVector trace_decls_; | 
|  | }; | 
|  |  | 
|  | #endif  // TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ |