forked from OSchip/llvm-project
ObjectiveC migrator: Another use case of enum
declaration which can be migrated to NS_ENUM. llvm-svn: 186716
This commit is contained in:
parent
b837248ad4
commit
c1c44f62bc
|
@ -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())
|
||||
|
|
|
@ -27,6 +27,14 @@ enum {
|
|||
|
||||
typedef NSUInteger UITableViewCellStyle;
|
||||
|
||||
typedef enum {
|
||||
UIViewAnimationTransitionNone,
|
||||
UIViewAnimationTransitionFlipFromLeft,
|
||||
UIViewAnimationTransitionFlipFromRight,
|
||||
UIViewAnimationTransitionCurlUp,
|
||||
UIViewAnimationTransitionCurlDown,
|
||||
} UIViewAnimationTransition;
|
||||
|
||||
enum {
|
||||
UNOne,
|
||||
UNTwo
|
||||
|
|
|
@ -27,6 +27,14 @@ typedef NS_OPTIONS(NSUInteger, UITableViewCellStyle) {
|
|||
|
||||
|
||||
|
||||
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
|
||||
UIViewAnimationTransitionNone,
|
||||
UIViewAnimationTransitionFlipFromLeft,
|
||||
UIViewAnimationTransitionFlipFromRight,
|
||||
UIViewAnimationTransitionCurlUp,
|
||||
UIViewAnimationTransitionCurlDown,
|
||||
} ;
|
||||
|
||||
enum {
|
||||
UNOne,
|
||||
UNTwo
|
||||
|
|
Loading…
Reference in New Issue