1224135Sdim//===--- ARCMTActions.cpp - ARC Migrate Tool Frontend Actions ---*- C++ -*-===//
2224135Sdim//
3224135Sdim//                     The LLVM Compiler Infrastructure
4224135Sdim//
5224135Sdim// This file is distributed under the University of Illinois Open Source
6224135Sdim// License. See LICENSE.TXT for details.
7224135Sdim//
8224135Sdim//===----------------------------------------------------------------------===//
9224135Sdim
10224135Sdim#include "clang/ARCMigrate/ARCMTActions.h"
11224135Sdim#include "clang/ARCMigrate/ARCMT.h"
12224135Sdim#include "clang/Frontend/CompilerInstance.h"
13224135Sdim
14224135Sdimusing namespace clang;
15224135Sdimusing namespace arcmt;
16224135Sdim
17224135Sdimbool CheckAction::BeginInvocation(CompilerInstance &CI) {
18235633Sdim  if (arcmt::checkForManualIssues(CI.getInvocation(), getCurrentInput(),
19224135Sdim                                  CI.getDiagnostics().getClient()))
20224135Sdim    return false; // errors, stop the action.
21224135Sdim
22224135Sdim  // We only want to see warnings reported from arcmt::checkForManualIssues.
23224135Sdim  CI.getDiagnostics().setIgnoreAllWarnings(true);
24224135Sdim  return true;
25224135Sdim}
26224135Sdim
27224135SdimCheckAction::CheckAction(FrontendAction *WrappedAction)
28224135Sdim  : WrapperFrontendAction(WrappedAction) {}
29224135Sdim
30224135Sdimbool ModifyAction::BeginInvocation(CompilerInstance &CI) {
31235633Sdim  return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(),
32224135Sdim                                      CI.getDiagnostics().getClient());
33224135Sdim}
34224135Sdim
35224135SdimModifyAction::ModifyAction(FrontendAction *WrappedAction)
36224135Sdim  : WrapperFrontendAction(WrappedAction) {}
37224135Sdim
38224135Sdimbool MigrateAction::BeginInvocation(CompilerInstance &CI) {
39226890Sdim  if (arcmt::migrateWithTemporaryFiles(CI.getInvocation(),
40235633Sdim                                       getCurrentInput(),
41235633Sdim                                       CI.getDiagnostics().getClient(),
42235633Sdim                                       MigrateDir,
43235633Sdim                                       EmitPremigrationARCErros,
44235633Sdim                                       PlistOut))
45226890Sdim    return false; // errors, stop the action.
46226890Sdim
47226890Sdim  // We only want to see diagnostics emitted by migrateWithTemporaryFiles.
48226890Sdim  CI.getDiagnostics().setIgnoreAllWarnings(true);
49226890Sdim  return true;
50224135Sdim}
51224135Sdim
52224135SdimMigrateAction::MigrateAction(FrontendAction *WrappedAction,
53226890Sdim                             StringRef migrateDir,
54226890Sdim                             StringRef plistOut,
55226890Sdim                             bool emitPremigrationARCErrors)
56226890Sdim  : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir),
57226890Sdim    PlistOut(plistOut), EmitPremigrationARCErros(emitPremigrationARCErrors) {
58224135Sdim  if (MigrateDir.empty())
59224135Sdim    MigrateDir = "."; // user current directory if none is given.
60224135Sdim}
61