123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- ARCMT.h - ARC Migration Rewriter ------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_ARCMIGRATE_ARCMT_H
- #define LLVM_CLANG_ARCMIGRATE_ARCMT_H
- #include "clang/ARCMigrate/FileRemapper.h"
- #include "clang/Basic/SourceLocation.h"
- #include "clang/Frontend/CompilerInvocation.h"
- namespace clang {
- class ASTContext;
- class DiagnosticConsumer;
- class PCHContainerOperations;
- namespace arcmt {
- class MigrationPass;
- /// Creates an AST with the provided CompilerInvocation but with these
- /// changes:
- /// -if a PCH/PTH is set, the original header is used instead
- /// -Automatic Reference Counting mode is enabled
- ///
- /// It then checks the AST and produces errors/warning for ARC migration issues
- /// that the user needs to handle manually.
- ///
- /// \param emitPremigrationARCErrors if true all ARC errors will get emitted
- /// even if the migrator can fix them, but the function will still return false
- /// if all ARC errors can be fixed.
- ///
- /// \param plistOut if non-empty, it is the file path to store the plist with
- /// the pre-migration ARC diagnostics.
- ///
- /// \returns false if no error is produced, true otherwise.
- bool
- checkForManualIssues(CompilerInvocation &CI, const FrontendInputFile &Input,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticConsumer *DiagClient,
- bool emitPremigrationARCErrors = false,
- StringRef plistOut = StringRef());
- /// Works similar to checkForManualIssues but instead of checking, it
- /// applies automatic modifications to source files to conform to ARC.
- ///
- /// \returns false if no error is produced, true otherwise.
- bool
- applyTransformations(CompilerInvocation &origCI,
- const FrontendInputFile &Input,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticConsumer *DiagClient);
- /// Applies automatic modifications and produces temporary files
- /// and metadata into the \p outputDir path.
- ///
- /// \param emitPremigrationARCErrors if true all ARC errors will get emitted
- /// even if the migrator can fix them, but the function will still return false
- /// if all ARC errors can be fixed.
- ///
- /// \param plistOut if non-empty, it is the file path to store the plist with
- /// the pre-migration ARC diagnostics.
- ///
- /// \returns false if no error is produced, true otherwise.
- bool migrateWithTemporaryFiles(
- CompilerInvocation &origCI, const FrontendInputFile &Input,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticConsumer *DiagClient, StringRef outputDir,
- bool emitPremigrationARCErrors, StringRef plistOut);
- /// Get the set of file remappings from the \p outputDir path that
- /// migrateWithTemporaryFiles produced.
- ///
- /// \returns false if no error is produced, true otherwise.
- bool getFileRemappings(std::vector<std::pair<std::string,std::string> > &remap,
- StringRef outputDir,
- DiagnosticConsumer *DiagClient);
- /// Get the set of file remappings from a list of files with remapping
- /// info.
- ///
- /// \returns false if no error is produced, true otherwise.
- bool getFileRemappingsFromFileList(
- std::vector<std::pair<std::string,std::string> > &remap,
- ArrayRef<StringRef> remapFiles,
- DiagnosticConsumer *DiagClient);
- typedef void (*TransformFn)(MigrationPass &pass);
- std::vector<TransformFn> getAllTransformations(LangOptions::GCMode OrigGCMode,
- bool NoFinalizeRemoval);
- class MigrationProcess {
- CompilerInvocation OrigCI;
- std::shared_ptr<PCHContainerOperations> PCHContainerOps;
- DiagnosticConsumer *DiagClient;
- FileRemapper Remapper;
- public:
- bool HadARCErrors;
- MigrationProcess(const CompilerInvocation &CI,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticConsumer *diagClient,
- StringRef outputDir = StringRef());
- class RewriteListener {
- public:
- virtual ~RewriteListener();
- virtual void start(ASTContext &Ctx) { }
- virtual void finish() { }
- virtual void insert(SourceLocation loc, StringRef text) { }
- virtual void remove(CharSourceRange range) { }
- };
- bool applyTransform(TransformFn trans, RewriteListener *listener = nullptr);
- FileRemapper &getRemapper() { return Remapper; }
- };
- } // end namespace arcmt
- } // end namespace clang
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|