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