diff options
author | Eric Liu <ioeric@google.com> | 2016-08-01 10:16:37 +0000 |
---|---|---|
committer | Eric Liu <ioeric@google.com> | 2016-08-01 10:16:37 +0000 |
commit | 85c0fa18d965d4ed91e037a085e4c20bcea7e27f (patch) | |
tree | c01feb771ce1fadf36ee0e2473b001d3405458bd /lib/Tooling/Refactoring.cpp | |
parent | 1505139f741e601408dc4aaddf8e352d28085f00 (diff) |
Implement tooling::Replacements as a class.
Summary:
- Implement clang::tooling::Replacements as a class to provide interfaces to
control how replacements for a single file are combined and provide guarantee
on the order of replacements being applied.
- tooling::Replacements only contains replacements for the same file now.
Use std::map<std::string, tooling::Replacements> to represent multi-file
replacements.
- Error handling for the interface change will be improved in followup patches.
Reviewers: djasper, klimek
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D21748
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@277335 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Tooling/Refactoring.cpp')
-rw-r--r-- | lib/Tooling/Refactoring.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/Tooling/Refactoring.cpp b/lib/Tooling/Refactoring.cpp index d48713c69f..5565b5499c 100644 --- a/lib/Tooling/Refactoring.cpp +++ b/lib/Tooling/Refactoring.cpp @@ -30,7 +30,9 @@ RefactoringTool::RefactoringTool( std::shared_ptr<PCHContainerOperations> PCHContainerOps) : ClangTool(Compilations, SourcePaths, PCHContainerOps) {} -Replacements &RefactoringTool::getReplacements() { return Replace; } +std::map<std::string, Replacements> &RefactoringTool::getReplacements() { + return FileToReplaces; +} int RefactoringTool::runAndSave(FrontendActionFactory *ActionFactory) { if (int Result = run(ActionFactory)) { @@ -54,20 +56,22 @@ int RefactoringTool::runAndSave(FrontendActionFactory *ActionFactory) { } bool RefactoringTool::applyAllReplacements(Rewriter &Rewrite) { - return tooling::applyAllReplacements(Replace, Rewrite); + bool Result = true; + for (const auto &Entry : FileToReplaces) + Result = tooling::applyAllReplacements(Entry.second, Rewrite) && Result; + return Result; } int RefactoringTool::saveRewrittenFiles(Rewriter &Rewrite) { return Rewrite.overwriteChangedFiles() ? 1 : 0; } -bool formatAndApplyAllReplacements(const Replacements &Replaces, - Rewriter &Rewrite, StringRef Style) { +bool formatAndApplyAllReplacements( + const std::map<std::string, Replacements> &FileToReplaces, Rewriter &Rewrite, + StringRef Style) { SourceManager &SM = Rewrite.getSourceMgr(); FileManager &Files = SM.getFileManager(); - auto FileToReplaces = groupReplacementsByFile(Replaces); - bool Result = true; for (const auto &FileAndReplaces : FileToReplaces) { const std::string &FilePath = FileAndReplaces.first; |