1f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth//===--- ARCMTActions.cpp - ARC Migrate Tool Frontend Actions ---*- C++ -*-===// 2f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// 3f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// The LLVM Compiler Infrastructure 4f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// 5f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// This file is distributed under the University of Illinois Open Source 6f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// License. See LICENSE.TXT for details. 7f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth// 8f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth//===----------------------------------------------------------------------===// 9f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 10f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth#include "clang/ARCMigrate/ARCMTActions.h" 11f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth#include "clang/ARCMigrate/ARCMT.h" 12f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth#include "clang/Frontend/CompilerInstance.h" 13f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 14f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruthusing namespace clang; 15f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruthusing namespace arcmt; 16f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 17e665d6929e11796620ff799bc0186ebd747bfc76Argyrios Kyrtzidisbool CheckAction::BeginInvocation(CompilerInstance &CI) { 181f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor if (arcmt::checkForManualIssues(CI.getInvocation(), getCurrentInput(), 19f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth CI.getDiagnostics().getClient())) 20e665d6929e11796620ff799bc0186ebd747bfc76Argyrios Kyrtzidis return false; // errors, stop the action. 21f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 22f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth // We only want to see warnings reported from arcmt::checkForManualIssues. 23f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth CI.getDiagnostics().setIgnoreAllWarnings(true); 24e665d6929e11796620ff799bc0186ebd747bfc76Argyrios Kyrtzidis return true; 25f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth} 26f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 27f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler CarruthCheckAction::CheckAction(FrontendAction *WrappedAction) 28f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth : WrapperFrontendAction(WrappedAction) {} 29f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 3069325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidisbool ModifyAction::BeginInvocation(CompilerInstance &CI) { 311f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(), 3269325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis CI.getDiagnostics().getClient()); 33f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth} 34f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 3569325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios KyrtzidisModifyAction::ModifyAction(FrontendAction *WrappedAction) 36f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth : WrapperFrontendAction(WrappedAction) {} 3769325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis 3869325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidisbool MigrateAction::BeginInvocation(CompilerInstance &CI) { 397ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis if (arcmt::migrateWithTemporaryFiles(CI.getInvocation(), 401f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor getCurrentInput(), 411f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor CI.getDiagnostics().getClient(), 421f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor MigrateDir, 431f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor EmitPremigrationARCErros, 441f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor PlistOut)) 457ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis return false; // errors, stop the action. 467ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis 477ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis // We only want to see diagnostics emitted by migrateWithTemporaryFiles. 487ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis CI.getDiagnostics().setIgnoreAllWarnings(true); 497ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis return true; 5069325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis} 5169325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis 5269325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios KyrtzidisMigrateAction::MigrateAction(FrontendAction *WrappedAction, 535f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner StringRef migrateDir, 545f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner StringRef plistOut, 557ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis bool emitPremigrationARCErrors) 567ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir), 577ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis PlistOut(plistOut), EmitPremigrationARCErros(emitPremigrationARCErrors) { 5869325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis if (MigrateDir.empty()) 5969325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis MigrateDir = "."; // user current directory if none is given. 6069325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis} 61