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

jahanian fjahanian at apple.com
Fri Aug 2 09:03:22 PDT 2013


Checked in an ‘improved’ version in r187655. Feel free to revert if it breaks public
buildbot again.

- Fariborz

On Aug 1, 2013, at 5:01 PM, Rafael Espindola <rafael.espindola at gmail.com> wrote:

> 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
> 
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130802/f642d85d/attachment.html>


More information about the cfe-commits mailing list