From: Fariborz Jahanian Date: Tue, 9 Jul 2013 16:59:14 +0000 (+0000) Subject: ObjC migrator: Add -objcmt-migrate-property to do property X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d412999a3da6387dbfaf00f7647132082e94310e;p=clang ObjC migrator: Add -objcmt-migrate-property to do property migration. Also, fixes an old bug where older migration flags were not being checked for properly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185948 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/ARCMigrate/ARCMTActions.h b/include/clang/ARCMigrate/ARCMTActions.h index 2daaf73065..2023c729b8 100644 --- a/include/clang/ARCMigrate/ARCMTActions.h +++ b/include/clang/ARCMigrate/ARCMTActions.h @@ -59,12 +59,14 @@ class ObjCMigrateAction : public WrapperFrontendAction { std::string MigrateDir; bool MigrateLiterals; bool MigrateSubscripting; + bool MigrateProperty; FileRemapper Remapper; CompilerInstance *CompInst; public: ObjCMigrateAction(FrontendAction *WrappedAction, StringRef migrateDir, bool migrateLiterals, - bool migrateSubscripting); + bool migrateSubscripting, + bool migrateProperty); protected: virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,StringRef InFile); diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 416a5de096..7e7e111aa4 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -160,7 +160,8 @@ def objcmt_migrate_literals : Flag<["-"], "objcmt-migrate-literals">, Flags<[CC1 HelpText<"Enable migration to modern ObjC literals">; def objcmt_migrate_subscripting : Flag<["-"], "objcmt-migrate-subscripting">, Flags<[CC1Option]>, HelpText<"Enable migration to modern ObjC subscripting">; - +def objcmt_migrate_property : Flag<["-"], "objcmt-migrate-property">, Flags<[CC1Option]>, + HelpText<"Enable migration to modern ObjC property">; // Make sure all other -ccc- options are rejected. def ccc_ : Joined<["-"], "ccc-">, Group, Flags<[Unsupported]>; diff --git a/include/clang/Frontend/FrontendOptions.h b/include/clang/Frontend/FrontendOptions.h index 1130f7b3fc..0b78d95e75 100644 --- a/include/clang/Frontend/FrontendOptions.h +++ b/include/clang/Frontend/FrontendOptions.h @@ -159,7 +159,9 @@ public: /// \brief Enable migration to modern ObjC literals. ObjCMT_Literals = 0x1, /// \brief Enable migration to modern ObjC subscripting. - ObjCMT_Subscripting = 0x2 + ObjCMT_Subscripting = 0x2, + /// \brief Enable migration to modern ObjC property. + ObjCMT_Property = 0x4 }; unsigned ObjCMTAction; diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index 5cb2223b8a..a19f023542 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -38,6 +38,7 @@ public: std::string MigrateDir; bool MigrateLiterals; bool MigrateSubscripting; + bool MigrateProperty; OwningPtr NSAPIObj; OwningPtr Editor; FileRemapper &Remapper; @@ -49,6 +50,7 @@ public: ObjCMigrateASTConsumer(StringRef migrateDir, bool migrateLiterals, bool migrateSubscripting, + bool migrateProperty, FileRemapper &remapper, FileManager &fileMgr, const PPConditionalDirectiveRecord *PPRec, @@ -57,6 +59,7 @@ public: : MigrateDir(migrateDir), MigrateLiterals(migrateLiterals), MigrateSubscripting(migrateSubscripting), + MigrateProperty(migrateProperty), Remapper(remapper), FileMgr(fileMgr), PPRec(PPRec), PP(PP), IsOutputFile(isOutputFile) { } @@ -88,9 +91,11 @@ protected: ObjCMigrateAction::ObjCMigrateAction(FrontendAction *WrappedAction, StringRef migrateDir, bool migrateLiterals, - bool migrateSubscripting) + bool migrateSubscripting, + bool migrateProperty) : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir), MigrateLiterals(migrateLiterals), MigrateSubscripting(migrateSubscripting), + MigrateProperty(migrateProperty), CompInst(0) { if (MigrateDir.empty()) MigrateDir = "."; // user current directory if none is given. @@ -106,6 +111,7 @@ ASTConsumer *ObjCMigrateAction::CreateASTConsumer(CompilerInstance &CI, ASTConsumer *MTConsumer = new ObjCMigrateASTConsumer(MigrateDir, MigrateLiterals, MigrateSubscripting, + MigrateProperty, Remapper, CompInst->getFileManager(), PPRec, @@ -247,11 +253,12 @@ public: void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { TranslationUnitDecl *TU = Ctx.getTranslationUnitDecl(); - for (DeclContext::decl_iterator D = TU->decls_begin(), DEnd = TU->decls_end(); - D != DEnd; ++D) { - if (ObjCInterfaceDecl *CDecl = dyn_cast(*D)) - migrateObjCInterfaceDecl(Ctx, CDecl); - } + if (MigrateProperty) + for (DeclContext::decl_iterator D = TU->decls_begin(), DEnd = TU->decls_end(); + D != DEnd; ++D) { + if (ObjCInterfaceDecl *CDecl = dyn_cast(*D)) + migrateObjCInterfaceDecl(Ctx, CDecl); + } Rewriter rewriter(Ctx.getSourceManager(), Ctx.getLangOpts()); RewritesReceiver Rec(rewriter); @@ -294,6 +301,7 @@ ASTConsumer *MigrateSourceAction::CreateASTConsumer(CompilerInstance &CI, return new ObjCMigrateASTConsumer(CI.getFrontendOpts().OutputFile, /*MigrateLiterals=*/true, /*MigrateSubscripting=*/true, + /*MigrateProperty*/true, Remapper, CI.getFileManager(), PPRec, diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 71a2b82a62..e014980320 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2635,13 +2635,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(A->getValue()); if (!Args.hasArg(options::OPT_objcmt_migrate_literals, - options::OPT_objcmt_migrate_subscripting)) { + options::OPT_objcmt_migrate_subscripting, + options::OPT_objcmt_migrate_property)) { // None specified, means enable them all. CmdArgs.push_back("-objcmt-migrate-literals"); CmdArgs.push_back("-objcmt-migrate-subscripting"); + CmdArgs.push_back("-objcmt-migrate-property"); } else { Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_literals); Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_subscripting); + Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property); } } diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index d8b4392278..97ca50ac4d 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -787,6 +787,8 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Opts.ObjCMTAction |= FrontendOptions::ObjCMT_Literals; if (Args.hasArg(OPT_objcmt_migrate_subscripting)) Opts.ObjCMTAction |= FrontendOptions::ObjCMT_Subscripting; + if (Args.hasArg(OPT_objcmt_migrate_property)) + Opts.ObjCMTAction |= FrontendOptions::ObjCMT_Property; if (Opts.ARCMTAction != FrontendOptions::ARCMT_None && Opts.ObjCMTAction != FrontendOptions::ObjCMT_None) { diff --git a/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/lib/FrontendTool/ExecuteCompilerInvocation.cpp index 0309d53f06..53f373d4f7 100644 --- a/lib/FrontendTool/ExecuteCompilerInvocation.cpp +++ b/lib/FrontendTool/ExecuteCompilerInvocation.cpp @@ -162,8 +162,9 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) { if (FEOpts.ObjCMTAction != FrontendOptions::ObjCMT_None) { Act = new arcmt::ObjCMigrateAction(Act, FEOpts.MTMigrateDir, - FEOpts.ObjCMTAction & ~FrontendOptions::ObjCMT_Literals, - FEOpts.ObjCMTAction & ~FrontendOptions::ObjCMT_Subscripting); + FEOpts.ObjCMTAction & FrontendOptions::ObjCMT_Literals, + FEOpts.ObjCMTAction & FrontendOptions::ObjCMT_Subscripting, + FEOpts.ObjCMTAction & FrontendOptions::ObjCMT_Property); } #endif diff --git a/test/ARCMT/objcmt-property.m b/test/ARCMT/objcmt-property.m index b264658471..1f0bcdd735 100644 --- a/test/ARCMT/objcmt-property.m +++ b/test/ARCMT/objcmt-property.m @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties -triple x86_64-apple-darwin11 +// RUN: %clang_cc1 -objcmt-migrate-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties -triple x86_64-apple-darwin11 // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties %s.result diff --git a/test/ARCMT/objcmt-property.m.result b/test/ARCMT/objcmt-property.m.result index f9d1986484..49162a4691 100644 --- a/test/ARCMT/objcmt-property.m.result +++ b/test/ARCMT/objcmt-property.m.result @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties -triple x86_64-apple-darwin11 +// RUN: %clang_cc1 -objcmt-migrate-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties -triple x86_64-apple-darwin11 // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties %s.result