Revert "ObjectiveC migrator. Migrate to instancetype return type for mehods with certain prefix selector matching their class names' suffix."

This reverts commit r187626.

It is breaking the bots.

llvm-svn: 187634
This commit is contained in:
Rafael Espindola 2013-08-02 00:01:14 +00:00
parent f818ef4c37
commit 6cbcc10e84
5 changed files with 30 additions and 141 deletions

View File

@ -586,7 +586,10 @@ enum ObjCInstanceTypeFamily {
OIT_None,
OIT_Array,
OIT_Dictionary,
OIT_MemManage
OIT_MemManage,
OIT_NSString,
OIT_NSSet,
OIT_NSURL
};
/// \brief Smart pointer class that efficiently represents Objective-C method

View File

@ -41,8 +41,6 @@ class ObjCMigrateASTConsumer : public ASTConsumer {
void migrateInstanceType(ASTContext &Ctx, ObjCContainerDecl *CDecl);
void migrateMethodInstanceType(ASTContext &Ctx, ObjCContainerDecl *CDecl,
ObjCMethodDecl *OM);
void migrateFactoryMethod(ASTContext &Ctx, ObjCContainerDecl *CDecl,
ObjCMethodDecl *OM);
public:
std::string MigrateDir;
@ -551,34 +549,13 @@ void ObjCMigrateASTConsumer::migrateNSEnumDecl(ASTContext &Ctx,
Editor->commit(commit);
}
static void ReplaceWithInstancetype(const ObjCMigrateASTConsumer &ASTC,
ObjCMethodDecl *OM) {
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(*ASTC.Editor);
commit.replace(R, ClassString);
ASTC.Editor->commit(commit);
}
void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx,
ObjCContainerDecl *CDecl,
ObjCMethodDecl *OM) {
ObjCInstanceTypeFamily OIT_Family =
Selector::getInstTypeMethodFamily(OM->getSelector());
if (OIT_Family == OIT_None) {
migrateFactoryMethod(Ctx, CDecl, OM);
if (OIT_Family == OIT_None)
return;
}
std::string ClassName;
switch (OIT_Family) {
case OIT_Array:
@ -604,11 +581,24 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx,
IDecl = ImpDecl->getClassInterface();
}
if (!IDecl ||
!IDecl->lookupInheritedClass(&Ctx.Idents.get(ClassName))) {
migrateFactoryMethod(Ctx, CDecl, OM);
!IDecl->lookupInheritedClass(&Ctx.Idents.get(ClassName)))
return;
SourceRange R;
std::string ClassString;
if (TypeSourceInfo *TSInfo = OM->getResultTypeSourceInfo()) {
TypeLoc TL = TSInfo->getTypeLoc();
R = SourceRange(TL.getBeginLoc(), TL.getEndLoc());
ClassString = "instancetype";
}
ReplaceWithInstancetype(*this, OM);
else {
R = SourceRange(OM->getLocStart(), OM->getLocStart());
ClassString = OM->isInstanceMethod() ? '-' : '+';
ClassString += " (instancetype)";
}
edit::Commit commit(*Editor);
commit.replace(R, ClassString);
Editor->commit(commit);
}
void ObjCMigrateASTConsumer::migrateInstanceType(ASTContext &Ctx,
@ -622,42 +612,6 @@ void ObjCMigrateASTConsumer::migrateInstanceType(ASTContext &Ctx,
}
}
void ObjCMigrateASTConsumer::migrateFactoryMethod(ASTContext &Ctx,
ObjCContainerDecl *CDecl,
ObjCMethodDecl *OM) {
if (OM->isInstanceMethod() || !OM->getResultType()->isObjCIdType())
return;
// Candidate factory methods are + (id) NaMeXXX : ... which belong to a class
// NSYYYNamE with matching names be at least 3 characters long.
ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(CDecl);
if (!IDecl) {
if (ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CDecl))
IDecl = CatDecl->getClassInterface();
else if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(CDecl))
IDecl = ImpDecl->getClassInterface();
}
if (!IDecl)
return;
StringRef ClassName = IDecl->getName();
if (!ClassName.startswith("NS"))
return;
ClassName = ClassName.lower();
IdentifierInfo *MethodIdName = OM->getSelector().getIdentifierInfoForSlot(0);
StringRef MethodName = MethodIdName->getName();
StringRef MethodNamePrefix = MethodName.substr(0, 3).lower();
size_t Ix = ClassName.rfind(MethodNamePrefix);
if (Ix == StringRef::npos)
return;
StringRef ClassNamePostfix = ClassName.substr(Ix);
MethodName = MethodName.lower();
if (!MethodName.startswith(ClassNamePostfix))
return;
ReplaceWithInstancetype(*this, OM);
}
namespace {
class RewritesReceiver : public edit::EditsReceiver {

View File

@ -474,6 +474,14 @@ ObjCInstanceTypeFamily Selector::getInstTypeMethodFamily(Selector sel) {
case 'r':
if (startsWithWord(name, "retain")) return OIT_MemManage;
break;
case 's':
if (startsWithWord(name, "string")) return OIT_NSString;
else
if (startsWithWord(name, "set")) return OIT_NSSet;
break;
case 'U':
if (startsWithWord(name, "URL")) return OIT_NSURL;
break;
default:
break;
}

View File

@ -1,76 +0,0 @@
// RUN: rm -rf %t
// 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-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc -fobjc-default-synthesize-properties %s.result
typedef unsigned int NSUInteger;
typedef int NSInteger;
typedef char BOOL;
@class NSData, NSError, NSProtocolChecker, NSObject;
@class NSPortNameServer, NSTimeZone;
@interface NSMutableString
@end
@interface NSString @end
@class NSString, NSURL;
@interface NSString (NSStringDeprecated)
+ (instancetype)stringWithContentsOfFile:(NSString *)path __attribute__((availability(macosx,introduced=10.0 ,deprecated=10.4,message="" )));
+ (instancetype)stringWithContentsOfURL:(NSURL *)url __attribute__((availability(macosx,introduced=10.0 ,deprecated=10.4,message="" )));
+ (instancetype)stringWithCString:(const char *)bytes length:(NSUInteger)length __attribute__((availability(macosx,introduced=10.0 ,deprecated=10.4,message="" )));
+ (instancetype)stringWithCString:(const char *)bytes __attribute__((availability(macosx,introduced=10.0 ,deprecated=10.4,message="" )));
@end
typedef enum NSURLBookmarkResolutionOptions {
Bookmark
} NSURLBookmarkResolutionOptions;
@interface NSURL
+ (instancetype)URLWithString:(NSString *)URLString;
+ (instancetype)URLWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL;
+ (instancetype)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error __attribute__((availability(macosx,introduced=10.6)));
@end
@class NSDictionary;
@interface NSError
+ (instancetype)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
@end
@interface NSMutableString (NSMutableStringExtensionMethods)
+ (instancetype)stringWithCapacity:(NSUInteger)capacity;
@end
@interface NSMutableData
+ (instancetype)dataWithCapacity:(NSUInteger)aNumItems;
+ (instancetype)dataWithLength:(NSUInteger)length;
@end
@interface NSMutableDictionary @end
@interface NSMutableDictionary (NSSharedKeySetDictionary)
+ (instancetype )dictionaryWithSharedKeySet:(id)keyset __attribute__((availability(macosx,introduced=10.8)));
@end
@interface NSProtocolChecker
+ (instancetype)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;
@end
@interface NSConnection
+ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
+ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;
@end
@interface NSDate
+ (instancetype)dateWithString:(NSString *)aString __attribute__((availability(macosx,introduced=10.4)));
@end
@interface NSCalendarDate : NSDate
+ (instancetype)calendarDate __attribute__((availability(macosx,introduced=10.4)));
+ (instancetype)dateWithString:(NSString *)description calendarFormat:(NSString *)format locale:(id)locale __attribute__((availability(macosx,introduced=10.4)));
+ (instancetype)dateWithString:(NSString *)description calendarFormat:(NSString *)format __attribute__((availability(macosx,introduced=10.4)));
+ (instancetype)dateWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone __attribute__((availability(macosx,introduced=10.4)));
@end

View File

@ -11,7 +11,7 @@ typedef signed char BOOL;
@end
@interface NSString : NSObject
+ (instancetype)stringWithString:(NSString *)string;
+ (id)stringWithString:(NSString *)string;
- (instancetype)initWithString:(NSString *)aString;
@end