From: Fariborz Jahanian Date: Fri, 27 Sep 2013 22:55:54 +0000 (+0000) Subject: ObjectiveC migrator. Infer property from getters only X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9fd802448d463777ed87d56a196b84da1ccdeaa5;p=clang ObjectiveC migrator. Infer property from getters only if property name is a valid identifier in the underlying language. // rdar://15044184 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191584 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index ca1d189ca3..71ad48f58b 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -761,6 +761,16 @@ static bool AttributesMatch(const Decl *Decl1, const Decl *Decl2) { return true; } +static bool IsValidIdentifier(ASTContext &Ctx, + const char *Name) { + if (!isIdentifierHead(Name[0])) + return false; + std::string NameString = Name; + NameString[0] = toLowercase(NameString[0]); + IdentifierInfo *II = &Ctx.Idents.get(NameString); + return II->getTokenID() == tok::identifier; +} + bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, ObjCContainerDecl *D, ObjCMethodDecl *Method) { @@ -799,7 +809,7 @@ bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, const char *CGetterName = getterNameString.data() + LengthOfPrefix; // Make sure that first character after "is" or "get" prefix can // start an identifier. - if (!isIdentifierHead(CGetterName[0])) + if (!IsValidIdentifier(Ctx, CGetterName)) return false; if (CGetterName[0] && isUppercase(CGetterName[0])) { getterName = &Ctx.Idents.get(CGetterName); diff --git a/test/ARCMT/objcmt-property.m b/test/ARCMT/objcmt-property.m index e8f4acc8e6..3de2352609 100644 --- a/test/ARCMT/objcmt-property.m +++ b/test/ARCMT/objcmt-property.m @@ -210,4 +210,8 @@ DEPRECATED - (NSURL *)init; // No Change + (id)alloc; // No Change +- (BOOL)is1stClass; // Not a valid property +- (BOOL)isClass; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + @end diff --git a/test/ARCMT/objcmt-property.m.result b/test/ARCMT/objcmt-property.m.result index 7c67444723..a27e02ac6e 100644 --- a/test/ARCMT/objcmt-property.m.result +++ b/test/ARCMT/objcmt-property.m.result @@ -210,4 +210,8 @@ DEPRECATED - (NSURL *)init; // No Change + (id)alloc; // No Change +- (BOOL)is1stClass; // Not a valid property +@property (nonatomic, getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + @end