diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-10-02 22:49:59 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-10-02 22:49:59 +0000 |
commit | b8941a15b6b5477a81c189614d0129070ac099f1 (patch) | |
tree | 73b91ffd76d3f3a87984536f535eee10c527963b /lib | |
parent | a00f8737e671b587e83280a53e85562c00a7a78d (diff) | |
download | clang-b8941a15b6b5477a81c189614d0129070ac099f1.tar.gz |
ObjectiveC migrator: Add individual options and
enable them for distinct feature migration.
// rdar://15003157
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191863 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ARCMigrate/ObjCMT.cpp | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index a6aa4c7402..7efc81f18b 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -48,7 +48,7 @@ class ObjCMigrateASTConsumer : public ASTConsumer { const ObjCImplementationDecl *ImpDecl); void migrateNSEnumDecl(ASTContext &Ctx, const EnumDecl *EnumDcl, const TypedefDecl *TypedefDcl); - void migrateMethods(ASTContext &Ctx, ObjCContainerDecl *CDecl); + void migrateAllMethodInstaceType(ASTContext &Ctx, ObjCContainerDecl *CDecl); void migrateMethodInstanceType(ASTContext &Ctx, ObjCContainerDecl *CDecl, ObjCMethodDecl *OM); bool migrateProperty(ASTContext &Ctx, ObjCContainerDecl *D, ObjCMethodDecl *OM); @@ -335,12 +335,14 @@ void ObjCMigrateASTConsumer::migrateObjCInterfaceDecl(ASTContext &Ctx, if (Method->isDeprecated()) continue; migrateProperty(Ctx, D, Method); - migrateNsReturnsInnerPointer(Ctx, Method); + if (ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) + migrateNsReturnsInnerPointer(Ctx, Method); } for (ObjCContainerDecl::prop_iterator P = D->prop_begin(), E = D->prop_end(); P != E; ++P) { ObjCPropertyDecl *Prop = *P; - if (!P->isDeprecated()) + if ((ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) && + !P->isDeprecated()) migratePropertyNsReturnsInnerPointer(Ctx, Prop); } } @@ -867,7 +869,7 @@ void ObjCMigrateASTConsumer::migratePropertyNsReturnsInnerPointer(ASTContext &Ct Editor->commit(commit); } -void ObjCMigrateASTConsumer::migrateMethods(ASTContext &Ctx, +void ObjCMigrateASTConsumer::migrateAllMethodInstaceType(ASTContext &Ctx, ObjCContainerDecl *CDecl) { if (CDecl->isDeprecated()) return; @@ -1331,9 +1333,11 @@ void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { D != DEnd; ++D) { if (unsigned FID = PP.getSourceManager().getFileID((*D)->getLocation()).getHashValue()) - if (FileId && FileId != FID) - AnnotateImplicitBridging(Ctx); - + if (FileId && FileId != FID) { + if (ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) + AnnotateImplicitBridging(Ctx); + } + if (ObjCInterfaceDecl *CDecl = dyn_cast<ObjCInterfaceDecl>(*D)) migrateObjCInterfaceDecl(Ctx, CDecl); if (ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(*D)) @@ -1341,26 +1345,35 @@ void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { else if (ObjCProtocolDecl *PDecl = dyn_cast<ObjCProtocolDecl>(*D)) ObjCProtocolDecls.insert(PDecl); else if (const ObjCImplementationDecl *ImpDecl = - dyn_cast<ObjCImplementationDecl>(*D)) - migrateProtocolConformance(Ctx, ImpDecl); + dyn_cast<ObjCImplementationDecl>(*D)) { + if (ASTMigrateActions & FrontendOptions::ObjCMT_ProtocolConformance) + migrateProtocolConformance(Ctx, ImpDecl); + } else if (const EnumDecl *ED = dyn_cast<EnumDecl>(*D)) { DeclContext::decl_iterator N = D; ++N; if (N != DEnd) - if (const TypedefDecl *TD = dyn_cast<TypedefDecl>(*N)) - migrateNSEnumDecl(Ctx, ED, TD); + if (const TypedefDecl *TD = dyn_cast<TypedefDecl>(*N)) { + if (ASTMigrateActions & FrontendOptions::ObjCMT_NsMacros) + migrateNSEnumDecl(Ctx, ED, TD); + } + } + else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*D)) { + if (ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) + migrateCFAnnotation(Ctx, FD); } - else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*D)) - migrateCFAnnotation(Ctx, FD); if (ObjCContainerDecl *CDecl = dyn_cast<ObjCContainerDecl>(*D)) { // migrate methods which can have instancetype as their result type. - migrateMethods(Ctx, CDecl); + if (ASTMigrateActions & FrontendOptions::ObjCMT_Instancetype) + migrateAllMethodInstaceType(Ctx, CDecl); // annotate methods with CF annotations. - migrateARCSafeAnnotation(Ctx, CDecl); + if (ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) + migrateARCSafeAnnotation(Ctx, CDecl); } } - AnnotateImplicitBridging(Ctx); + if (ASTMigrateActions & FrontendOptions::ObjCMT_Annotation) + AnnotateImplicitBridging(Ctx); } Rewriter rewriter(Ctx.getSourceManager(), Ctx.getLangOpts()); |