summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-08-02 00:01:14 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-08-02 00:01:14 +0000
commitcd683986e991f0e60afd6bc6f336cfc1fd844193 (patch)
treee59914deef3a28ff11568c100985753e99c1a774
parentd836061745ec078e61b6532dddcb968e503dfb06 (diff)
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187634 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/IdentifierTable.h5
-rw-r--r--lib/ARCMigrate/ObjCMT.cpp80
-rw-r--r--lib/Basic/IdentifierTable.cpp8
-rw-r--r--test/ARCMT/objcmt-instancetype-2.m.result76
-rw-r--r--test/ARCMT/objcmt-instancetype.m.result2
5 files changed, 30 insertions, 141 deletions
diff --git a/include/clang/Basic/IdentifierTable.h b/include/clang/Basic/IdentifierTable.h
index 0bc13e6555..8e12b972ed 100644
--- a/include/clang/Basic/IdentifierTable.h
+++ b/include/clang/Basic/IdentifierTable.h
@@ -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
diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp
index 62f3c6b7e7..2b2f9224e9 100644
--- a/lib/ARCMigrate/ObjCMT.cpp
+++ b/lib/ARCMigrate/ObjCMT.cpp
@@ -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";
+ }
+ else {
+ R = SourceRange(OM->getLocStart(), OM->getLocStart());
+ ClassString = OM->isInstanceMethod() ? '-' : '+';
+ ClassString += " (instancetype)";
}
- ReplaceWithInstancetype(*this, OM);
+ 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 {
diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp
index 3572930903..96d9e56b6c 100644
--- a/lib/Basic/IdentifierTable.cpp
+++ b/lib/Basic/IdentifierTable.cpp
@@ -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;
}
diff --git a/test/ARCMT/objcmt-instancetype-2.m.result b/test/ARCMT/objcmt-instancetype-2.m.result
deleted file mode 100644
index ba66480653..0000000000
--- a/test/ARCMT/objcmt-instancetype-2.m.result
+++ /dev/null
@@ -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
-
diff --git a/test/ARCMT/objcmt-instancetype.m.result b/test/ARCMT/objcmt-instancetype.m.result
index ad8fcaeb9b..7bc554faed 100644
--- a/test/ARCMT/objcmt-instancetype.m.result
+++ b/test/ARCMT/objcmt-instancetype.m.result
@@ -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