diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-07-19 20:18:36 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-07-19 20:18:36 +0000 |
commit | c1c44f62bc0a1c4b2c187b94aafbe7b569af076d (patch) | |
tree | 15a5e889e03dfa5d1482d6e52a45164c2125ab53 | |
parent | b837248ad46d12285c7166c9fb67db1604bdb1ad (diff) | |
download | bcm5719-llvm-c1c44f62bc0a1c4b2c187b94aafbe7b569af076d.tar.gz bcm5719-llvm-c1c44f62bc0a1c4b2c187b94aafbe7b569af076d.zip |
ObjectiveC migrator: Another use case of enum
declaration which can be migrated to NS_ENUM.
llvm-svn: 186716
-rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 35 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-ns-macros.m | 8 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-ns-macros.m.result | 8 |
3 files changed, 48 insertions, 3 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index 282006b5769..e4ec0c83c50 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/lib/ARCMigrate/ObjCMT.cpp @@ -384,7 +384,7 @@ static bool rewriteToNSEnumDecl(const EnumDecl *EnumDcl, const TypedefDecl *TypedefDcl, const NSAPI &NS, edit::Commit &commit, bool IsNSIntegerType) { - std::string ClassString = + std::string ClassString = IsNSIntegerType ? "typedef NS_ENUM(NSInteger, " : "typedef NS_OPTIONS(NSUInteger, "; ClassString += TypedefDcl->getIdentifier()->getName(); ClassString += ')'; @@ -399,6 +399,19 @@ static bool rewriteToNSEnumDecl(const EnumDecl *EnumDcl, return false; } +static bool rewriteToNSEnumDecl(const EnumDecl *EnumDcl, + const TypedefDecl *TypedefDcl, + const NSAPI &NS, edit::Commit &commit) { + std::string ClassString = "NS_ENUM(NSInteger, "; + ClassString += TypedefDcl->getIdentifier()->getName(); + ClassString += ')'; + SourceRange R(EnumDcl->getLocStart(), EnumDcl->getLocStart()); + commit.replace(R, ClassString); + SourceLocation TypedefLoc = TypedefDcl->getLocEnd(); + commit.remove(SourceRange(TypedefLoc, TypedefLoc)); + return true; +} + void ObjCMigrateASTConsumer::migrateProtocolConformance(ASTContext &Ctx, const ObjCImplementationDecl *ImpDecl) { const ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface(); @@ -466,8 +479,24 @@ void ObjCMigrateASTConsumer::migrateNSEnumDecl(ASTContext &Ctx, QualType qt = TypedefDcl->getTypeSourceInfo()->getType(); bool IsNSIntegerType = NSAPIObj->isObjCNSIntegerType(qt); bool IsNSUIntegerType = !IsNSIntegerType && NSAPIObj->isObjCNSUIntegerType(qt); - if (!IsNSIntegerType && !IsNSUIntegerType) - return; + if (!IsNSIntegerType && !IsNSUIntegerType) { + // Also check for typedef enum {...} TD; + if (const EnumType *EnumTy = qt->getAs<EnumType>()) { + if (EnumTy->getDecl() == EnumDcl) { + // NS_ENUM must be available. + if (!Ctx.Idents.get("NS_ENUM").hasMacroDefinition()) + return; + edit::Commit commit(*Editor); + rewriteToNSEnumDecl(EnumDcl, TypedefDcl, *NSAPIObj, commit); + Editor->commit(commit); + return; + } + else + return; + } + else + return; + } // NS_ENUM must be available. if (IsNSIntegerType && !Ctx.Idents.get("NS_ENUM").hasMacroDefinition()) diff --git a/clang/test/ARCMT/objcmt-ns-macros.m b/clang/test/ARCMT/objcmt-ns-macros.m index b9069f57923..42d7d2cd8f6 100644 --- a/clang/test/ARCMT/objcmt-ns-macros.m +++ b/clang/test/ARCMT/objcmt-ns-macros.m @@ -27,6 +27,14 @@ enum { typedef NSUInteger UITableViewCellStyle; +typedef enum { + UIViewAnimationTransitionNone, + UIViewAnimationTransitionFlipFromLeft, + UIViewAnimationTransitionFlipFromRight, + UIViewAnimationTransitionCurlUp, + UIViewAnimationTransitionCurlDown, +} UIViewAnimationTransition; + enum { UNOne, UNTwo diff --git a/clang/test/ARCMT/objcmt-ns-macros.m.result b/clang/test/ARCMT/objcmt-ns-macros.m.result index fcfe077039c..ee9b60596ff 100644 --- a/clang/test/ARCMT/objcmt-ns-macros.m.result +++ b/clang/test/ARCMT/objcmt-ns-macros.m.result @@ -27,6 +27,14 @@ typedef NS_OPTIONS(NSUInteger, UITableViewCellStyle) { +typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { + UIViewAnimationTransitionNone, + UIViewAnimationTransitionFlipFromLeft, + UIViewAnimationTransitionFlipFromRight, + UIViewAnimationTransitionCurlUp, + UIViewAnimationTransitionCurlDown, +} ; + enum { UNOne, UNTwo |