From 5e151c507d7a939a10499ca6a4482b9d6dbfed99 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian <fjahanian@apple.com> Date: Wed, 24 Jul 2013 18:31:42 +0000 Subject: [PATCH] ObjectiveC migration: Method candidates for migrating to instancetype can have implicit 'id' type too. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187062 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ARCMigrate/ObjCMT.cpp | 16 ++++++++++++---- test/ARCMT/objcmt-instancetype.m | 4 ++-- test/ARCMT/objcmt-instancetype.m.result | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index 5d53830022..bd6e97c781 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -585,11 +585,19 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx, !IDecl->lookupInheritedClass(&Ctx.Idents.get("NSDictionary"))) return; - TypeSourceInfo *TSInfo = OM->getResultTypeSourceInfo(); - TypeLoc TL = TSInfo->getTypeLoc(); - SourceRange R = SourceRange(TL.getBeginLoc(), TL.getEndLoc()); + SourceRange R; + std::string ClassString; + if (TypeSourceInfo *TSInfo = OM->getResultTypeSourceInfo()) { + TypeLoc TL = TSInfo->getTypeLoc(); + R = SourceRange(TL.getBeginLoc(), TL.getEndLoc()); + ClassString = "instancetype"; + } + else { + R = SourceRange(OM->getLocStart(), OM->getLocStart()); + ClassString = OM->isInstanceMethod() ? '-' : '+'; + ClassString += " (instancetype)"; + } edit::Commit commit(*Editor); - std::string ClassString = "instancetype"; commit.replace(R, ClassString); Editor->commit(commit); } diff --git a/test/ARCMT/objcmt-instancetype.m b/test/ARCMT/objcmt-instancetype.m index 5e4f886893..32f84d52db 100644 --- a/test/ARCMT/objcmt-instancetype.m +++ b/test/ARCMT/objcmt-instancetype.m @@ -25,7 +25,7 @@ typedef signed char BOOL; + (id)arrayWithObject:(id)anObject; + (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; + (id)arrayWithObjects:(id)firstObj, ...; -+ (id)arrayWithArray:(NSArray *)array; ++ arrayWithArray:(NSArray *)array; - (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; - (id)initWithObjects:(id)firstObj, ...; @@ -47,7 +47,7 @@ typedef signed char BOOL; + (id)dictionary; + (id)dictionaryWithObject:(id)object forKey:(id)key; + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; -+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...; ++ dictionaryWithObjectsAndKeys:(id)firstObject, ...; + (id)dictionaryWithDictionary:(NSDictionary *)dict; + (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; diff --git a/test/ARCMT/objcmt-instancetype.m.result b/test/ARCMT/objcmt-instancetype.m.result index 3b3ee8bcc6..af06e67e2a 100644 --- a/test/ARCMT/objcmt-instancetype.m.result +++ b/test/ARCMT/objcmt-instancetype.m.result @@ -25,7 +25,7 @@ typedef signed char BOOL; + (instancetype)arrayWithObject:(id)anObject; + (instancetype)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; + (instancetype)arrayWithObjects:(id)firstObj, ...; -+ (instancetype)arrayWithArray:(NSArray *)array; ++ (instancetype) arrayWithArray:(NSArray *)array; - (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; - (id)initWithObjects:(id)firstObj, ...; @@ -47,7 +47,7 @@ typedef signed char BOOL; + (instancetype)dictionary; + (instancetype)dictionaryWithObject:(id)object forKey:(id)key; + (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; -+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...; ++ (instancetype) dictionaryWithObjectsAndKeys:(id)firstObject, ...; + (instancetype)dictionaryWithDictionary:(NSDictionary *)dict; + (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; -- 2.40.0