// Copyright 2016 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. // // Handles various rewrites for base::ListValue::Append(). #ifndef TOOLS_CLANG_VALUE_CLEANUP_LIST_VALUE_REWRITER_H_ #define TOOLS_CLANG_VALUE_CLEANUP_LIST_VALUE_REWRITER_H_ #include <memory> #include <set> #include <unordered_set> #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Tooling/Refactoring.h" class ListValueRewriter { public: explicit ListValueRewriter( std::set<clang::tooling::Replacement>* replacements); void RegisterMatchers(clang::ast_matchers::MatchFinder* match_finder); private: class AppendCallback : public clang::ast_matchers::MatchFinder::MatchCallback { public: explicit AppendCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; protected: std::set<clang::tooling::Replacement>* const replacements_; }; class AppendBooleanCallback : public AppendCallback { public: explicit AppendBooleanCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; }; class AppendIntegerCallback : public AppendCallback { public: explicit AppendIntegerCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; }; class AppendDoubleCallback : public AppendCallback { public: explicit AppendDoubleCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; }; class AppendStringCallback : public AppendCallback { public: explicit AppendStringCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; }; class AppendReleasedUniquePtrCallback : public clang::ast_matchers::MatchFinder::MatchCallback { public: explicit AppendReleasedUniquePtrCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; private: std::set<clang::tooling::Replacement>* const replacements_; }; class AppendRawPtrCallback : public clang::ast_matchers::MatchFinder::MatchCallback { public: explicit AppendRawPtrCallback( std::set<clang::tooling::Replacement>* replacements); void run( const clang::ast_matchers::MatchFinder::MatchResult& result) override; private: std::set<clang::tooling::Replacement>* const replacements_; std::unordered_set<const clang::VarDecl*> visited_; }; AppendBooleanCallback append_boolean_callback_; AppendIntegerCallback append_integer_callback_; AppendDoubleCallback append_double_callback_; AppendStringCallback append_string_callback_; AppendReleasedUniquePtrCallback append_released_unique_ptr_callback_; AppendRawPtrCallback append_raw_ptr_callback_; }; #endif // TOOLS_CLANG_VALUE_CLEANUP_LIST_VALUE_REWRITER_H_