Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- RenamingAction.h - Clang refactoring library ---------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// Provides an action to rename every symbol at a point.
  11. ///
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_TOOLING_REFACTORING_RENAME_RENAMINGACTION_H
  15. #define LLVM_CLANG_TOOLING_REFACTORING_RENAME_RENAMINGACTION_H
  16.  
  17. #include "clang/Tooling/Refactoring.h"
  18. #include "clang/Tooling/Refactoring/AtomicChange.h"
  19. #include "clang/Tooling/Refactoring/RefactoringActionRules.h"
  20. #include "clang/Tooling/Refactoring/RefactoringOptions.h"
  21. #include "clang/Tooling/Refactoring/Rename/SymbolOccurrences.h"
  22. #include "llvm/Support/Error.h"
  23.  
  24. namespace clang {
  25. class ASTConsumer;
  26.  
  27. namespace tooling {
  28.  
  29. class RenamingAction {
  30. public:
  31.   RenamingAction(const std::vector<std::string> &NewNames,
  32.                  const std::vector<std::string> &PrevNames,
  33.                  const std::vector<std::vector<std::string>> &USRList,
  34.                  std::map<std::string, tooling::Replacements> &FileToReplaces,
  35.                  bool PrintLocations = false)
  36.       : NewNames(NewNames), PrevNames(PrevNames), USRList(USRList),
  37.         FileToReplaces(FileToReplaces), PrintLocations(PrintLocations) {}
  38.  
  39.   std::unique_ptr<ASTConsumer> newASTConsumer();
  40.  
  41. private:
  42.   const std::vector<std::string> &NewNames, &PrevNames;
  43.   const std::vector<std::vector<std::string>> &USRList;
  44.   std::map<std::string, tooling::Replacements> &FileToReplaces;
  45.   bool PrintLocations;
  46. };
  47.  
  48. class RenameOccurrences final : public SourceChangeRefactoringRule {
  49. public:
  50.   static Expected<RenameOccurrences> initiate(RefactoringRuleContext &Context,
  51.                                               SourceRange SelectionRange,
  52.                                               std::string NewName);
  53.  
  54.   static const RefactoringDescriptor &describe();
  55.  
  56.   const NamedDecl *getRenameDecl() const;
  57.  
  58. private:
  59.   RenameOccurrences(const NamedDecl *ND, std::string NewName)
  60.       : ND(ND), NewName(std::move(NewName)) {}
  61.  
  62.   Expected<AtomicChanges>
  63.   createSourceReplacements(RefactoringRuleContext &Context) override;
  64.  
  65.   const NamedDecl *ND;
  66.   std::string NewName;
  67. };
  68.  
  69. class QualifiedRenameRule final : public SourceChangeRefactoringRule {
  70. public:
  71.   static Expected<QualifiedRenameRule> initiate(RefactoringRuleContext &Context,
  72.                                                 std::string OldQualifiedName,
  73.                                                 std::string NewQualifiedName);
  74.  
  75.   static const RefactoringDescriptor &describe();
  76.  
  77. private:
  78.   QualifiedRenameRule(const NamedDecl *ND,
  79.                       std::string NewQualifiedName)
  80.       : ND(ND), NewQualifiedName(std::move(NewQualifiedName)) {}
  81.  
  82.   Expected<AtomicChanges>
  83.   createSourceReplacements(RefactoringRuleContext &Context) override;
  84.  
  85.   // A NamedDecl which identifies the symbol being renamed.
  86.   const NamedDecl *ND;
  87.   // The new qualified name to change the symbol to.
  88.   std::string NewQualifiedName;
  89. };
  90.  
  91. /// Returns source replacements that correspond to the rename of the given
  92. /// symbol occurrences.
  93. llvm::Expected<std::vector<AtomicChange>>
  94. createRenameReplacements(const SymbolOccurrences &Occurrences,
  95.                          const SourceManager &SM, const SymbolName &NewName);
  96.  
  97. /// Rename all symbols identified by the given USRs.
  98. class QualifiedRenamingAction {
  99. public:
  100.   QualifiedRenamingAction(
  101.       const std::vector<std::string> &NewNames,
  102.       const std::vector<std::vector<std::string>> &USRList,
  103.       std::map<std::string, tooling::Replacements> &FileToReplaces)
  104.       : NewNames(NewNames), USRList(USRList), FileToReplaces(FileToReplaces) {}
  105.  
  106.   std::unique_ptr<ASTConsumer> newASTConsumer();
  107.  
  108. private:
  109.   /// New symbol names.
  110.   const std::vector<std::string> &NewNames;
  111.  
  112.   /// A list of USRs. Each element represents USRs of a symbol being renamed.
  113.   const std::vector<std::vector<std::string>> &USRList;
  114.  
  115.   /// A file path to replacements map.
  116.   std::map<std::string, tooling::Replacements> &FileToReplaces;
  117. };
  118.  
  119. } // end namespace tooling
  120. } // end namespace clang
  121.  
  122. #endif // LLVM_CLANG_TOOLING_REFACTORING_RENAME_RENAMINGACTION_H
  123.