ObjectiveC migrator: some refactoring to reduce
code size.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189070 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp
index 59bac41..ff670af 100644
--- a/lib/ARCMigrate/ObjCMT.cpp
+++ b/lib/ARCMigrate/ObjCMT.cpp
@@ -49,8 +49,7 @@
                             ObjCMethodDecl *OM,
                             ObjCInstanceTypeFamily OIT_Family = OIT_None);
   
-  void migrateCFFunctions(ASTContext &Ctx,
-                          const FunctionDecl *FuncDecl);
+  void migrateCFAnnotation(ASTContext &Ctx, const Decl *Decl);
   
   void AnnotateImplicitBridging(ASTContext &Ctx);
   
@@ -61,9 +60,6 @@
   
   bool migrateAddMethodAnnotation(ASTContext &Ctx,
                                   const ObjCMethodDecl *MethodDecl);
-  
-  void migrateMethodForCFAnnotation(ASTContext &Ctx,
-                               const ObjCMethodDecl *MethodDecl);
 public:
   std::string MigrateDir;
   bool MigrateLiterals;
@@ -832,30 +828,32 @@
   CFFunctionIBCandidates.clear();
 }
 
-void ObjCMigrateASTConsumer::migrateCFFunctions(
-                               ASTContext &Ctx,
-                               const FunctionDecl *FuncDecl) {
-  if (FuncDecl->hasAttr<CFAuditedTransferAttr>()) {
+void ObjCMigrateASTConsumer::migrateCFAnnotation(ASTContext &Ctx, const Decl *Decl) {
+  if (Decl->hasAttr<CFAuditedTransferAttr>()) {
     assert(CFFunctionIBCandidates.empty() &&
-           "Cannot have audited functions inside user "
+           "Cannot have audited functions/methods inside user "
            "provided CF_IMPLICIT_BRIDGING_ENABLE");
     return;
   }
   
   // Finction must be annotated first.
-  bool Audited = migrateAddFunctionAnnotation(Ctx, FuncDecl);
+  bool Audited;
+  if (const FunctionDecl *FuncDecl = dyn_cast<FunctionDecl>(Decl))
+    Audited = migrateAddFunctionAnnotation(Ctx, FuncDecl);
+  else
+    Audited = migrateAddMethodAnnotation(Ctx, cast<ObjCMethodDecl>(Decl));
   if (Audited) {
-    CFFunctionIBCandidates.push_back(FuncDecl);
+    CFFunctionIBCandidates.push_back(Decl);
     if (!FileId)
-      FileId = PP.getSourceManager().getFileID(FuncDecl->getLocation()).getHashValue();
+      FileId = PP.getSourceManager().getFileID(Decl->getLocation()).getHashValue();
   }
   else
     AnnotateImplicitBridging(Ctx);
 }
 
 bool ObjCMigrateASTConsumer::migrateAddFunctionAnnotation(
-                                                ASTContext &Ctx,
-                                                const FunctionDecl *FuncDecl) {
+                                                  ASTContext &Ctx,
+                                                  const FunctionDecl *FuncDecl) {
   if (FuncDecl->hasBody())
     return false;
 
@@ -933,31 +931,10 @@
        MEnd = CDecl->meth_end();
        M != MEnd; ++M) {
     ObjCMethodDecl *Method = (*M);
-    migrateMethodForCFAnnotation(Ctx, Method);
+    migrateCFAnnotation(Ctx, Method);
   }
 }
 
-void ObjCMigrateASTConsumer::migrateMethodForCFAnnotation(
-                                            ASTContext &Ctx,
-                                            const ObjCMethodDecl *MethodDecl) {
-  if (MethodDecl->hasAttr<CFAuditedTransferAttr>()) {
-    assert(CFFunctionIBCandidates.empty() &&
-           "Cannot have audited method inside user "
-           "provided CF_IMPLICIT_BRIDGING_ENABLE");
-    return;
-  }
-  
-  // Method must be annotated first.
-  bool Audited = migrateAddMethodAnnotation(Ctx, MethodDecl);
-  if (Audited) {
-    CFFunctionIBCandidates.push_back(MethodDecl);
-    if (!FileId)
-      FileId = PP.getSourceManager().getFileID(MethodDecl->getLocation()).getHashValue();
-  }
-  else
-    AnnotateImplicitBridging(Ctx);
-}
-
 bool ObjCMigrateASTConsumer::migrateAddMethodAnnotation(ASTContext &Ctx,
                                                         const ObjCMethodDecl *MethodDecl) {
   if (MethodDecl->hasBody())
@@ -1074,7 +1051,7 @@
             migrateNSEnumDecl(Ctx, ED, TD);
       }
       else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*D))
-        migrateCFFunctions(Ctx, FD);
+        migrateCFAnnotation(Ctx, FD);
       
       if (ObjCContainerDecl *CDecl = dyn_cast<ObjCContainerDecl>(*D)) {
         // migrate methods which can have instancetype as their result type.