blob: 647eb78773a1dfc7e1a92940be9169c1f5874038 [file] [log] [blame]
// Copyright 2017 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 "ValueRewriter.h"
#include <utility>
using namespace clang::ast_matchers;
ValueRewriter::ListValueCallback::ListValueCallback(
std::string method,
std::string replacement,
std::set<clang::tooling::Replacement>* replacements)
: method_(std::move(method)),
replacement_(std::move(replacement)),
replacements_(replacements) {}
void ValueRewriter::ListValueCallback::run(
const MatchFinder::MatchResult& result) {
auto* callExpr = result.Nodes.getNodeAs<clang::CXXMemberCallExpr>(method());
clang::CharSourceRange call_range =
clang::CharSourceRange::getTokenRange(callExpr->getExprLoc());
replacements_->emplace(*result.SourceManager, call_range, replacement());
}
ValueRewriter::ValueRewriter(
std::set<clang::tooling::Replacement>* replacements)
: list_value_callbacks_({
{"::base::ListValue::Clear", "GetList().clear", replacements},
{"::base::ListValue::GetSize", "GetList().size", replacements},
{"::base::ListValue::empty", "GetList().empty", replacements},
{"::base::ListValue::Reserve", "GetList().reserve", replacements},
{"::base::ListValue::AppendBoolean", "GetList().emplace_back",
replacements},
{"::base::ListValue::AppendInteger", "GetList().emplace_back",
replacements},
{"::base::ListValue::AppendDouble", "GetList().emplace_back",
replacements},
{"::base::ListValue::AppendString", "GetList().emplace_back",
replacements},
}) {}
void ValueRewriter::RegisterMatchers(MatchFinder* match_finder) {
for (auto& callback : list_value_callbacks_) {
match_finder->addMatcher(
callExpr(callee(functionDecl(hasName(callback.method()))))
.bind(callback.method()),
&callback);
}
}