1 //===--- ARCMTActions.cpp - ARC Migrate Tool Frontend Actions ---*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "clang/ARCMigrate/ARCMTActions.h" 10 #include "clang/ARCMigrate/ARCMT.h" 11 #include "clang/Frontend/CompilerInstance.h" 12 13 using namespace clang; 14 using namespace arcmt; 15 16 bool CheckAction::BeginInvocation(CompilerInstance &CI) { 17 if (arcmt::checkForManualIssues(CI.getInvocation(), getCurrentInput(), 18 CI.getPCHContainerOperations(), 19 CI.getDiagnostics().getClient())) 20 return false; // errors, stop the action. 21 22 // We only want to see warnings reported from arcmt::checkForManualIssues. 23 CI.getDiagnostics().setIgnoreAllWarnings(true); 24 return true; 25 } 26 27 CheckAction::CheckAction(std::unique_ptr<FrontendAction> WrappedAction) 28 : WrapperFrontendAction(std::move(WrappedAction)) {} 29 30 bool ModifyAction::BeginInvocation(CompilerInstance &CI) { 31 return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(), 32 CI.getPCHContainerOperations(), 33 CI.getDiagnostics().getClient()); 34 } 35 36 ModifyAction::ModifyAction(std::unique_ptr<FrontendAction> WrappedAction) 37 : WrapperFrontendAction(std::move(WrappedAction)) {} 38 39 bool MigrateAction::BeginInvocation(CompilerInstance &CI) { 40 if (arcmt::migrateWithTemporaryFiles( 41 CI.getInvocation(), getCurrentInput(), CI.getPCHContainerOperations(), 42 CI.getDiagnostics().getClient(), MigrateDir, EmitPremigrationARCErrors, 43 PlistOut)) 44 return false; // errors, stop the action. 45 46 // We only want to see diagnostics emitted by migrateWithTemporaryFiles. 47 CI.getDiagnostics().setIgnoreAllWarnings(true); 48 return true; 49 } 50 51 MigrateAction::MigrateAction(std::unique_ptr<FrontendAction> WrappedAction, 52 StringRef migrateDir, 53 StringRef plistOut, 54 bool emitPremigrationARCErrors) 55 : WrapperFrontendAction(std::move(WrappedAction)), MigrateDir(migrateDir), 56 PlistOut(plistOut), EmitPremigrationARCErrors(emitPremigrationARCErrors) { 57 if (MigrateDir.empty()) 58 MigrateDir = "."; // user current directory if none is given. 59 } 60