1//===--- ARCMTActions.cpp - ARC Migrate Tool Frontend Actions ---*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/ARCMigrate/ARCMTActions.h"
11#include "clang/ARCMigrate/ARCMT.h"
12#include "clang/Frontend/CompilerInstance.h"
13
14using namespace clang;
15using namespace arcmt;
16
17bool CheckAction::BeginInvocation(CompilerInstance &CI) {
18  if (arcmt::checkForManualIssues(CI.getInvocation(), getCurrentInput(),
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
27CheckAction::CheckAction(FrontendAction *WrappedAction)
28  : WrapperFrontendAction(WrappedAction) {}
29
30bool ModifyAction::BeginInvocation(CompilerInstance &CI) {
31  return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(),
32                                      CI.getDiagnostics().getClient());
33}
34
35ModifyAction::ModifyAction(FrontendAction *WrappedAction)
36  : WrapperFrontendAction(WrappedAction) {}
37
38bool MigrateAction::BeginInvocation(CompilerInstance &CI) {
39  if (arcmt::migrateWithTemporaryFiles(CI.getInvocation(),
40                                       getCurrentInput(),
41                                       CI.getDiagnostics().getClient(),
42                                       MigrateDir,
43                                       EmitPremigrationARCErros,
44                                       PlistOut))
45    return false; // errors, stop the action.
46
47  // We only want to see diagnostics emitted by migrateWithTemporaryFiles.
48  CI.getDiagnostics().setIgnoreAllWarnings(true);
49  return true;
50}
51
52MigrateAction::MigrateAction(FrontendAction *WrappedAction,
53                             StringRef migrateDir,
54                             StringRef plistOut,
55                             bool emitPremigrationARCErrors)
56  : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir),
57    PlistOut(plistOut), EmitPremigrationARCErros(emitPremigrationARCErrors) {
58  if (MigrateDir.empty())
59    MigrateDir = "."; // user current directory if none is given.
60}
61