1 //===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H 11 #define LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H 12 13 #include "clang/Frontend/FrontendAction.h" 14 15 namespace clang { 16 class FixItRewriter; 17 class FixItOptions; 18 19 //===----------------------------------------------------------------------===// 20 // AST Consumer Actions 21 //===----------------------------------------------------------------------===// 22 23 class HTMLPrintAction : public ASTFrontendAction { 24 protected: 25 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, 26 StringRef InFile) override; 27 }; 28 29 class FixItAction : public ASTFrontendAction { 30 protected: 31 std::unique_ptr<FixItRewriter> Rewriter; 32 std::unique_ptr<FixItOptions> FixItOpts; 33 34 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, 35 StringRef InFile) override; 36 37 bool BeginSourceFileAction(CompilerInstance &CI, 38 StringRef Filename) override; 39 40 void EndSourceFileAction() override; 41 hasASTFileSupport()42 bool hasASTFileSupport() const override { return false; } 43 44 public: 45 FixItAction(); 46 ~FixItAction() override; 47 }; 48 49 /// \brief Emits changes to temporary files and uses them for the original 50 /// frontend action. 51 class FixItRecompile : public WrapperFrontendAction { 52 public: FixItRecompile(std::unique_ptr<FrontendAction> WrappedAction)53 FixItRecompile(std::unique_ptr<FrontendAction> WrappedAction) 54 : WrapperFrontendAction(std::move(WrappedAction)) {} 55 56 protected: 57 bool BeginInvocation(CompilerInstance &CI) override; 58 }; 59 60 class RewriteObjCAction : public ASTFrontendAction { 61 protected: 62 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, 63 StringRef InFile) override; 64 }; 65 66 class RewriteMacrosAction : public PreprocessorFrontendAction { 67 protected: 68 void ExecuteAction() override; 69 }; 70 71 class RewriteTestAction : public PreprocessorFrontendAction { 72 protected: 73 void ExecuteAction() override; 74 }; 75 76 class RewriteIncludesAction : public PreprocessorFrontendAction { 77 protected: 78 void ExecuteAction() override; 79 }; 80 81 } // end namespace clang 82 83 #endif 84