// Copyright 2015 The Chromium Authors
// 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_