19b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===//
29b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//
39b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//                     The LLVM Compiler Infrastructure
49b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//
59b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar// This file is distributed under the University of Illinois Open Source
69b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar// License. See LICENSE.TXT for details.
79b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//
89b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//===----------------------------------------------------------------------===//
99b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
109b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar#ifndef LLVM_CLANG_REWRITE_FRONTENDACTIONS_H
119b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar#define LLVM_CLANG_REWRITE_FRONTENDACTIONS_H
129b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
139b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar#include "clang/Frontend/FrontendAction.h"
149b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
159b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarnamespace clang {
169b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass FixItRewriter;
171450f265fcc84a7ca64dd9f3b8d4492c5bd55e23Nick Lewyckyclass FixItOptions;
189b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
199b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//===----------------------------------------------------------------------===//
209b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar// AST Consumer Actions
219b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar//===----------------------------------------------------------------------===//
229b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
239b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass HTMLPrintAction : public ASTFrontendAction {
249b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarprotected:
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                 StringRef InFile) override;
279b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar};
289b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
299b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass FixItAction : public ASTFrontendAction {
309b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarprotected:
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  std::unique_ptr<FixItRewriter> Rewriter;
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  std::unique_ptr<FixItOptions> FixItOpts;
339b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                 StringRef InFile) override;
369b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  bool BeginSourceFileAction(CompilerInstance &CI,
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                             StringRef Filename) override;
399b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void EndSourceFileAction() override;
419b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  bool hasASTFileSupport() const override { return false; }
439b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
449b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarpublic:
459b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar  FixItAction();
469b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar  ~FixItAction();
479b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar};
489b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
4961d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis/// \brief Emits changes to temporary files and uses them for the original
5061d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis/// frontend action.
5161d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidisclass FixItRecompile : public WrapperFrontendAction {
5261d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidispublic:
5361d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis  FixItRecompile(FrontendAction *WrappedAction)
54272afe4a6f28a3abdac8a90516bd8a60592195abArgyrios Kyrtzidis    : WrapperFrontendAction(WrappedAction) {}
5561d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis
5661d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidisprotected:
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  bool BeginInvocation(CompilerInstance &CI) override;
5861d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis};
5961d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis
609b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass RewriteObjCAction : public ASTFrontendAction {
619b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarprotected:
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                 StringRef InFile) override;
649b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar};
659b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
669b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass RewriteMacrosAction : public PreprocessorFrontendAction {
679b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarprotected:
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void ExecuteAction() override;
699b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar};
709b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
719b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarclass RewriteTestAction : public PreprocessorFrontendAction {
729b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbarprotected:
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void ExecuteAction() override;
749b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar};
759b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
768c0b3787e7ccc7978b42dfbb84da2b802c743a5dDavid Blaikieclass RewriteIncludesAction : public PreprocessorFrontendAction {
778c0b3787e7ccc7978b42dfbb84da2b802c743a5dDavid Blaikieprotected:
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void ExecuteAction() override;
798c0b3787e7ccc7978b42dfbb84da2b802c743a5dDavid Blaikie};
808c0b3787e7ccc7978b42dfbb84da2b802c743a5dDavid Blaikie
819b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar}  // end namespace clang
829b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar
839b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar#endif
84