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(), 1987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar CI.getPCHContainerOperations(), 20f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth CI.getDiagnostics().getClient())) 21e665d6929e11796620ff799bc0186ebd747bfc76Argyrios Kyrtzidis return false; // errors, stop the action. 22f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 23f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth // We only want to see warnings reported from arcmt::checkForManualIssues. 24f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth CI.getDiagnostics().setIgnoreAllWarnings(true); 25e665d6929e11796620ff799bc0186ebd747bfc76Argyrios Kyrtzidis return true; 26f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth} 27f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCheckAction::CheckAction(std::unique_ptr<FrontendAction> WrappedAction) 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar : WrapperFrontendAction(std::move(WrappedAction)) {} 30f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 3169325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidisbool ModifyAction::BeginInvocation(CompilerInstance &CI) { 321f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(), 3387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar CI.getPCHContainerOperations(), 3469325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis CI.getDiagnostics().getClient()); 35f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth} 36f7f8188fac71e34e09ee457ff6f039f5d14ad117Chandler Carruth 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarModifyAction::ModifyAction(std::unique_ptr<FrontendAction> WrappedAction) 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar : WrapperFrontendAction(std::move(WrappedAction)) {} 3969325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis 4069325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidisbool MigrateAction::BeginInvocation(CompilerInstance &CI) { 4187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar if (arcmt::migrateWithTemporaryFiles( 4287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar CI.getInvocation(), getCurrentInput(), CI.getPCHContainerOperations(), 4387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar CI.getDiagnostics().getClient(), MigrateDir, EmitPremigrationARCErros, 4487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 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 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarMigrateAction::MigrateAction(std::unique_ptr<FrontendAction> WrappedAction, 535f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner StringRef migrateDir, 545f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner StringRef plistOut, 557ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis bool emitPremigrationARCErrors) 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar : WrapperFrontendAction(std::move(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