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)); |
} |