]> granicus.if.org Git - clang/commitdiff
ObjectiveC migrator. Infer property from getters only
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 27 Sep 2013 22:55:54 +0000 (22:55 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 27 Sep 2013 22:55:54 +0000 (22:55 +0000)
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

lib/ARCMigrate/ObjCMT.cpp
test/ARCMT/objcmt-property.m
test/ARCMT/objcmt-property.m.result

index ca1d189ca33c7eaf4aee9800ebf41dfe186c8eb7..71ad48f58bdc511968c94d2cfec3d07c49ce657d 100644 (file)
@@ -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);
index e8f4acc8e638d4a94cbe9818aa038b0a7941b0ba..3de23526095922066c66907002048f00453ed832 100644 (file)
@@ -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
index 7c6744472316dde0cfef360b91638c0a3ab17e36..a27e02ac6e564bcc0a6a24b33f47d8ec3dc07316 100644 (file)
@@ -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