Chromium Code Reviews| Index: tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp |
| diff --git a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp |
| index 9ae3201a4c2b0964141b30d3207de19373c716b6..f48515399cda33e4097e5189289eda563715deaf 100644 |
| --- a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp |
| +++ b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp |
| @@ -494,6 +494,25 @@ class RewriterBase : public MatchFinder::MatchCallback { |
| explicit RewriterBase(Replacements* replacements) |
| : replacements_(replacements) {} |
| + void addReplacementIfNeeded(const Replacement& new_replacement) { |
| + // Ignore the replacement if it is a duplicate. |
| + bool is_same_replacement_already_present = std::any_of( |
| + replacements_->begin(), replacements_->end(), |
| + [&new_replacement](const Replacement& old_replacement) { |
| + return new_replacement.toString() == old_replacement.toString(); |
|
Łukasz Anforowicz
2016/08/16 22:24:16
Replacement doesn't define ==. And Replacements d
|
| + }); |
| + if (is_same_replacement_already_present) |
| + return; |
|
Łukasz Anforowicz
2016/08/16 22:24:16
If we didn't check |is_same_replacement_already_pr
|
| + |
| + // Try to add the replacement |
| + if (llvm::Error err = replacements_->add(new_replacement)) { |
| + llvm::outs() << "Replacements::add failed: " |
| + << toString(std::move(err)) << "\n"; |
| + assert(false); // Order-dependent replacements? |
| + return; |
|
Łukasz Anforowicz
2016/08/16 22:24:16
I am not sure how I should spell a fatal failure..
|
| + } |
| + } |
| + |
| void run(const MatchFinder::MatchResult& result) override { |
| const DeclNode* decl = result.Nodes.getNodeAs<DeclNode>("decl"); |
| // If false, there's no name to be renamed. |
| @@ -523,7 +542,7 @@ class RewriterBase : public MatchFinder::MatchCallback { |
| *result.Nodes.getNodeAs<TargetNode>( |
| TargetNodeTraits<TargetNode>::GetName())); |
| clang::CharSourceRange range = clang::CharSourceRange::getTokenRange(loc); |
| - replacements_->emplace(*result.SourceManager, range, new_name); |
| + addReplacementIfNeeded(Replacement(*result.SourceManager, range, new_name)); |
| replacement_names_.emplace(old_name.str(), std::move(new_name)); |
| } |