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

Rafael Espindola rafael.espindola at gmail.com
Thu Aug 1 17:01:14 PDT 2013


Author: rafael
Date: Thu Aug  1 19:01:14 2013
New Revision: 187634

URL: http://llvm.org/viewvc/llvm-project?rev=187634&view=rev
Log:
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.

Removed:
    cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result
Modified:
    cfe/trunk/include/clang/Basic/IdentifierTable.h
    cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
    cfe/trunk/lib/Basic/IdentifierTable.cpp
    cfe/trunk/test/ARCMT/objcmt-instancetype.m.result

Modified: cfe/trunk/include/clang/Basic/IdentifierTable.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/IdentifierTable.h?rev=187634&r1=187633&r2=187634&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/IdentifierTable.h (original)
+++ cfe/trunk/include/clang/Basic/IdentifierTable.h Thu Aug  1 19:01:14 2013
@@ -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

Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=187634&r1=187633&r2=187634&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Thu Aug  1 19:01:14 2013
@@ -41,8 +41,6 @@ class ObjCMigrateASTConsumer : public AS
   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::migrateNSEn
   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::migrateMeth
       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::migrateInst
   }
 }
 
-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 {

Modified: cfe/trunk/lib/Basic/IdentifierTable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/IdentifierTable.cpp?rev=187634&r1=187633&r2=187634&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/IdentifierTable.cpp (original)
+++ cfe/trunk/lib/Basic/IdentifierTable.cpp Thu Aug  1 19:01:14 2013
@@ -474,6 +474,14 @@ ObjCInstanceTypeFamily Selector::getInst
     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;
   }

Removed: cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result?rev=187633&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result (original)
+++ cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result (removed)
@@ -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;
- at class NSData, NSError, NSProtocolChecker, NSObject;
- at class NSPortNameServer, NSTimeZone;
-
- at interface NSMutableString
- at end
-
- at interface NSString @end
-
- at class NSString, NSURL;
- at 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="" )));
- at end
-
-
-typedef enum NSURLBookmarkResolutionOptions {
-                Bookmark
-} NSURLBookmarkResolutionOptions;
-
- at 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)));
- at end
-
- at class NSDictionary;
- at interface NSError
-+ (instancetype)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
- at end
-
-
- at interface NSMutableString (NSMutableStringExtensionMethods)
-+ (instancetype)stringWithCapacity:(NSUInteger)capacity;
- at end
-
- at interface NSMutableData
-+ (instancetype)dataWithCapacity:(NSUInteger)aNumItems;
-+ (instancetype)dataWithLength:(NSUInteger)length;
- at end
-
- at interface NSMutableDictionary @end
-
- at interface NSMutableDictionary (NSSharedKeySetDictionary)
-+ (instancetype )dictionaryWithSharedKeySet:(id)keyset __attribute__((availability(macosx,introduced=10.8)));
- at end
-
- at interface NSProtocolChecker
-+ (instancetype)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;
- at end
-
- at interface NSConnection
-+ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
-+ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;
- at end
-
- at interface NSDate
-+ (instancetype)dateWithString:(NSString *)aString __attribute__((availability(macosx,introduced=10.4)));
- at end
-
- at 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)));
- at end
-

Modified: cfe/trunk/test/ARCMT/objcmt-instancetype.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-instancetype.m.result?rev=187634&r1=187633&r2=187634&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-instancetype.m.result (original)
+++ cfe/trunk/test/ARCMT/objcmt-instancetype.m.result Thu Aug  1 19:01:14 2013
@@ -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
 





More information about the cfe-commits mailing list