Ruturaj4 updated this revision to Diff 543982.
Ruturaj4 added a comment.


1. Updating D152770 <https://reviews.llvm.org/D152770>: [clang][ExtractAPI] Add 
support for Objective-C categories #
2. Enter a brief description of the changes included in this update.
3. The first line is used as subject, next lines as comment. #
4. If you intended to create a new revision, use:
5. $ arc diff --create

Thanks for your comments and sorry for delay. I have changed the design and 
moved everything in SymbolGraphSerializer.cpp.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D152770/new/

https://reviews.llvm.org/D152770

Files:
  clang/include/clang/ExtractAPI/API.h
  clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
  clang/include/clang/ExtractAPI/Serialization/SerializerBase.h
  clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
  clang/lib/ExtractAPI/API.cpp
  clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
  clang/test/ExtractAPI/objc_module_category.m
  clang/test/ExtractAPI/objc_various_categories.m

Index: clang/test/ExtractAPI/objc_various_categories.m
===================================================================
--- clang/test/ExtractAPI/objc_various_categories.m
+++ clang/test/ExtractAPI/objc_various_categories.m
@@ -25,13 +25,17 @@
 @end
 
 @interface MyClass2 (MyCategory2)
-- (int) SomeMethod;
+- (int) SomeMethod2;
 @end
 
-@interface NSString (Category)
+@interface NSString (Category1)
 -(void) StringMethod;
 @end
 
+@interface NSString (Category2)
+-(void) StringMethod2;
+@end
+
 //--- myclass_1.h
 @interface MyClass1
 @end
@@ -74,27 +78,39 @@
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cs)MyClass2(im)SomeMethod",
+      "source": "c:objc(cy)MyClass2@MyCategory2",
+      "target": "c:objc(cs)MyClass2",
+      "targetFallback": "MyClass2"
+    },
+    {
+      "kind": "memberOf",
+      "source": "c:objc(cs)MyClass2(im)SomeMethod2",
       "target": "c:objc(cy)MyClass2@MyCategory2",
       "targetFallback": "MyCategory2"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cs)NSString(im)StringMethod",
-      "target": "c:objc(cy)NSString@Category",
-      "targetFallback": "Category"
+      "source": "c:objc(cy)NSString@Category1",
+      "target": "c:objc(cs)NSString",
+      "targetFallback": "NSString"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cy)MyClass2@MyCategory2",
-      "target": "c:objc(cs)MyClass2",
-      "targetFallback": "MyClass2"
+      "source": "c:objc(cs)NSString(im)StringMethod",
+      "target": "c:objc(cy)NSString@Category1",
+      "targetFallback": "Category1"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cy)NSString@Category",
+      "source": "c:objc(cy)NSString@Category2",
       "target": "c:objc(cs)NSString",
       "targetFallback": "NSString"
+    },
+    {
+      "kind": "memberOf",
+      "source": "c:objc(cs)NSString(im)StringMethod2",
+      "target": "c:objc(cy)NSString@Category2",
+      "targetFallback": "Category2"
     }
   ],
   "symbols": [
@@ -221,6 +237,17 @@
         "SomeMethod"
       ]
     },
+    {
+      "accessLevel": "public",
+      "identifier": {
+        "interfaceLanguage": "objective-c",
+        "precise": "c:objc(cs)MyClass2"
+      },
+      "kind": {
+        "displayName": "Module Extension",
+        "identifier": "objective-c.module.extension"
+      }
+    },
     {
       "accessLevel": "public",
       "declarationFragments": [
@@ -252,7 +279,7 @@
       ],
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cy)MyClass2@MyCategory2"
+        "precise": "c:objc(cs)MyClass2"
       },
       "kind": {
         "displayName": "Class Extension",
@@ -302,7 +329,7 @@
         },
         {
           "kind": "identifier",
-          "spelling": "SomeMethod"
+          "spelling": "SomeMethod2"
         },
         {
           "kind": "text",
@@ -320,7 +347,7 @@
       },
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cs)MyClass2(im)SomeMethod"
+        "precise": "c:objc(cs)MyClass2(im)SomeMethod2"
       },
       "kind": {
         "displayName": "Instance Method",
@@ -337,7 +364,7 @@
         "navigator": [
           {
             "kind": "identifier",
-            "spelling": "SomeMethod"
+            "spelling": "SomeMethod2"
           }
         ],
         "subHeading": [
@@ -347,16 +374,27 @@
           },
           {
             "kind": "identifier",
-            "spelling": "SomeMethod"
+            "spelling": "SomeMethod2"
           }
         ],
-        "title": "SomeMethod"
+        "title": "SomeMethod2"
       },
       "pathComponents": [
-        "MyClass2",
-        "SomeMethod"
+        "MyCategory2",
+        "SomeMethod2"
       ]
     },
+    {
+      "accessLevel": "public",
+      "identifier": {
+        "interfaceLanguage": "objective-c",
+        "precise": "c:objc(cs)NSString"
+      },
+      "kind": {
+        "displayName": "Module Extension",
+        "identifier": "objective-c.module.extension"
+      }
+    },
     {
       "accessLevel": "public",
       "declarationFragments": [
@@ -379,7 +417,7 @@
         },
         {
           "kind": "identifier",
-          "spelling": "Category"
+          "spelling": "Category1"
         },
         {
           "kind": "text",
@@ -388,7 +426,7 @@
       ],
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cy)NSString@Category"
+        "precise": "c:objc(cs)NSString"
       },
       "kind": {
         "displayName": "Class Extension",
@@ -405,19 +443,19 @@
         "navigator": [
           {
             "kind": "identifier",
-            "spelling": "Category"
+            "spelling": "Category1"
           }
         ],
         "subHeading": [
           {
             "kind": "identifier",
-            "spelling": "Category"
+            "spelling": "Category1"
           }
         ],
-        "title": "NSString (Category)"
+        "title": "NSString (Category1)"
       },
       "pathComponents": [
-        "Category"
+        "Category1"
       ]
     },
     {
@@ -489,31 +527,145 @@
         "title": "StringMethod"
       },
       "pathComponents": [
-        "NSString",
+        "Category1",
         "StringMethod"
       ]
     },
     {
       "accessLevel": "public",
+      "declarationFragments": [
+        {
+          "kind": "keyword",
+          "spelling": "@interface"
+        },
+        {
+          "kind": "text",
+          "spelling": " "
+        },
+        {
+          "kind": "typeIdentifier",
+          "preciseIdentifier": "c:objc(cs)NSString",
+          "spelling": "NSString"
+        },
+        {
+          "kind": "text",
+          "spelling": " ("
+        },
+        {
+          "kind": "identifier",
+          "spelling": "Category2"
+        },
+        {
+          "kind": "text",
+          "spelling": ")"
+        }
+      ],
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cs)MyClass2"
+        "precise": "c:objc(cs)NSString"
       },
       "kind": {
-        "displayName": "Module Extension",
-        "identifier": "objective-c.module.extension"
-      }
+        "displayName": "Class Extension",
+        "identifier": "objective-c.class.extension"
+      },
+      "location": {
+        "position": {
+          "character": 12,
+          "line": 17
+        },
+        "uri": "file://INPUT_DIR/input.h"
+      },
+      "names": {
+        "navigator": [
+          {
+            "kind": "identifier",
+            "spelling": "Category2"
+          }
+        ],
+        "subHeading": [
+          {
+            "kind": "identifier",
+            "spelling": "Category2"
+          }
+        ],
+        "title": "NSString (Category2)"
+      },
+      "pathComponents": [
+        "Category2"
+      ]
     },
     {
       "accessLevel": "public",
+      "declarationFragments": [
+        {
+          "kind": "text",
+          "spelling": "- ("
+        },
+        {
+          "kind": "typeIdentifier",
+          "preciseIdentifier": "c:v",
+          "spelling": "void"
+        },
+        {
+          "kind": "text",
+          "spelling": ") "
+        },
+        {
+          "kind": "identifier",
+          "spelling": "StringMethod2"
+        },
+        {
+          "kind": "text",
+          "spelling": ";"
+        }
+      ],
+      "functionSignature": {
+        "returns": [
+          {
+            "kind": "typeIdentifier",
+            "preciseIdentifier": "c:v",
+            "spelling": "void"
+          }
+        ]
+      },
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cs)NSString"
+        "precise": "c:objc(cs)NSString(im)StringMethod2"
       },
       "kind": {
-        "displayName": "Module Extension",
-        "identifier": "objective-c.module.extension"
-      }
+        "displayName": "Instance Method",
+        "identifier": "objective-c.method"
+      },
+      "location": {
+        "position": {
+          "character": 1,
+          "line": 18
+        },
+        "uri": "file://INPUT_DIR/input.h"
+      },
+      "names": {
+        "navigator": [
+          {
+            "kind": "identifier",
+            "spelling": "StringMethod2"
+          }
+        ],
+        "subHeading": [
+          {
+            "kind": "text",
+            "spelling": "- "
+          },
+          {
+            "kind": "identifier",
+            "spelling": "StringMethod2"
+          }
+        ],
+        "title": "StringMethod2"
+      },
+      "pathComponents": [
+        "Category2",
+        "StringMethod2"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/objc_module_category.m
===================================================================
--- clang/test/ExtractAPI/objc_module_category.m
+++ clang/test/ExtractAPI/objc_module_category.m
@@ -54,30 +54,41 @@
   "relationships": [
     {
       "kind": "memberOf",
-      "source": "c:objc(cs)NSString(im)method1",
-      "target": "c:objc(cy)NSString@Category1",
-      "targetFallback": "Category1"
+      "source": "c:objc(cy)NSString@Category1",
+      "target": "c:objc(cs)NSString",
+      "targetFallback": "NSString"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cs)NSString(im)method2",
-      "target": "c:objc(cy)NSString@Category2",
-      "targetFallback": "Category2"
+      "source": "c:objc(cs)NSString(im)method1",
+      "target": "c:objc(cy)NSString@Category1",
+      "targetFallback": "Category1"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cy)NSString@Category1",
+      "source": "c:objc(cy)NSString@Category2",
       "target": "c:objc(cs)NSString",
       "targetFallback": "NSString"
     },
     {
       "kind": "memberOf",
-      "source": "c:objc(cy)NSString@Category2",
-      "target": "c:objc(cs)NSString",
-      "targetFallback": "NSString"
+      "source": "c:objc(cs)NSString(im)method2",
+      "target": "c:objc(cy)NSString@Category2",
+      "targetFallback": "Category2"
     }
   ],
   "symbols": [
+    {
+      "accessLevel": "public",
+      "identifier": {
+        "interfaceLanguage": "objective-c",
+        "precise": "c:objc(cs)NSString"
+      },
+      "kind": {
+        "displayName": "Module Extension",
+        "identifier": "objective-c.module.extension"
+      }
+    },
     {
       "accessLevel": "public",
       "declarationFragments": [
@@ -126,7 +137,7 @@
       },
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cy)NSString@Category1"
+        "precise": "c:objc(cs)NSString"
       },
       "kind": {
         "displayName": "Class Extension",
@@ -227,7 +238,7 @@
         "title": "method1"
       },
       "pathComponents": [
-        "NSString",
+        "Category1",
         "method1"
       ]
     },
@@ -279,7 +290,7 @@
       },
       "identifier": {
         "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cy)NSString@Category2"
+        "precise": "c:objc(cs)NSString"
       },
       "kind": {
         "displayName": "Class Extension",
@@ -380,20 +391,9 @@
         "title": "method2"
       },
       "pathComponents": [
-        "NSString",
+        "Category2",
         "method2"
       ]
-    },
-    {
-      "accessLevel": "public",
-      "identifier": {
-        "interfaceLanguage": "objective-c",
-        "precise": "c:objc(cs)NSString"
-      },
-      "kind": {
-        "displayName": "Module Extension",
-        "identifier": "objective-c.module.extension"
-      }
     }
   ]
 }
Index: clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
===================================================================
--- clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -216,7 +216,11 @@
 /// references, and the interface language name.
 Object serializeIdentifier(const APIRecord &Record, Language Lang) {
   Object Identifier;
-  Identifier["precise"] = Record.USR;
+  if (auto *CategoryRecord =
+          dyn_cast_or_null<const ObjCCategoryRecord>(&Record))
+    Identifier["precise"] = CategoryRecord->Interface.USR;
+  else
+    Identifier["precise"] = Record.USR;
   Identifier["interfaceLanguage"] = getLanguageName(Lang);
 
   return Identifier;
@@ -506,14 +510,16 @@
     if (!ParentRecord)
       ParentRecord = API.findRecordForUSR(CurrentParent->ParentUSR);
 
-    // If the parent is a category then we need to pretend this belongs to the
-    // associated interface.
+    // If the parent is a category extended from internal module then we need to
+    // pretend this belongs to the associated interface.
     if (auto *CategoryRecord =
             dyn_cast_or_null<ObjCCategoryRecord>(ParentRecord)) {
-      ParentRecord = API.findRecordForUSR(CategoryRecord->Interface.USR);
-      CurrentParentComponent = PathComponent(CategoryRecord->Interface.USR,
-                                             CategoryRecord->Interface.Name,
-                                             APIRecord::RK_ObjCInterface);
+      if (!CategoryRecord->IsFromExternalModule) {
+        ParentRecord = API.findRecordForUSR(CategoryRecord->Interface.USR);
+        CurrentParentComponent = PathComponent(CategoryRecord->Interface.USR,
+                                               CategoryRecord->Interface.Name,
+                                               APIRecord::RK_ObjCInterface);
+      }
     }
 
     // The parent record doesn't exist which means the symbol shouldn't be
@@ -744,28 +750,31 @@
   }
 }
 
-void SymbolGraphSerializer::visitObjCCategoryModuleRecord(
-    const ObjCCategoryModuleRecord &Record) {
-  Object Obj;
-  serializeObject(Obj, "identifier",
-                  serializeIdentifier(Record, API.getLanguage()));
-  serializeObject(
-      Obj, "kind",
-      serializeSymbolKind(APIRecord::RK_ObjCCategoryModule, API.getLanguage()));
-  Obj["accessLevel"] = "public";
-  Symbols.emplace_back(std::move(Obj));
-
-  // If the category is extended from an external module, it is then member of
-  // that module.
-  for (const auto &Category : Record.Categories)
-    serializeRelationship(RelationshipKind::MemberOf, *Category, Record);
-}
-
 void SymbolGraphSerializer::visitObjCCategoryRecord(
     const ObjCCategoryRecord &Record) {
   if (!Record.IsFromExternalModule)
     return;
 
+  // Check if the current Category Record has been visited before, if not add.
+  if (!(visitedCategories.contains(Record.Interface.Name) > 0)) {
+    visitedCategories.insert(Record.Interface.Name);
+    Object Obj;
+    serializeObject(Obj, "identifier",
+                    serializeIdentifier(Record, API.getLanguage()));
+    serializeObject(Obj, "kind",
+                    serializeSymbolKind(APIRecord::RK_ObjCCategoryModule,
+                                        API.getLanguage()));
+    Obj["accessLevel"] = "public";
+    Symbols.emplace_back(std::move(Obj));
+  }
+
+  Object Relationship;
+  Relationship["source"] = Record.USR;
+  Relationship["target"] = Record.Interface.USR;
+  Relationship["targetFallback"] = Record.Interface.Name;
+  Relationship["kind"] = getRelationshipString(RelationshipKind::MemberOf);
+  Relationships.emplace_back(std::move(Relationship));
+
   auto ObjCCategory = serializeAPIRecord(Record);
 
   if (!ObjCCategory)
@@ -815,9 +824,6 @@
   case APIRecord::RK_ObjCCategory:
     visitObjCCategoryRecord(*cast<ObjCCategoryRecord>(Record));
     break;
-  case APIRecord::RK_ObjCCategoryModule:
-    visitObjCCategoryModuleRecord(*cast<ObjCCategoryModuleRecord>(Record));
-    break;
   case APIRecord::RK_MacroDefinition:
     visitMacroDefinitionRecord(*cast<MacroDefinitionRecord>(Record));
     break;
Index: clang/lib/ExtractAPI/API.cpp
===================================================================
--- clang/lib/ExtractAPI/API.cpp
+++ clang/lib/ExtractAPI/API.cpp
@@ -120,15 +120,6 @@
                            SubHeading, IsFromSystemHeader);
 }
 
-ObjCCategoryModuleRecord *APISet::addObjCCategoryModule(StringRef Name,
-                                                        StringRef USR) {
-  // Create the category record.
-  auto *Record =
-      addTopLevelRecord(USRBasedLookupTable, ObjCCategoryModule, USR, Name);
-
-  return Record;
-}
-
 ObjCCategoryRecord *APISet::addObjCCategory(
     StringRef Name, StringRef USR, PresumedLoc Loc,
     AvailabilitySet Availabilities, const DocComment &Comment,
@@ -142,17 +133,10 @@
                         SubHeading, Interface, IsFromSystemHeader);
 
   Record->IsFromExternalModule = IsFromExternalModule;
-  // If this category is extending an external module, associate it with that
-  // module.
-  if (IsFromExternalModule) {
-    auto It = ObjCCategoryModule.find(Interface.USR);
-    if (It != ObjCCategoryModule.end())
-      It->second->Categories.push_back(Record);
-  } else {
-    auto It = ObjCInterfaces.find(Interface.USR);
-    if (It != ObjCInterfaces.end())
-      It->second->Categories.push_back(Record);
-  }
+
+  auto It = ObjCInterfaces.find(Interface.USR);
+  if (It != ObjCInterfaces.end())
+    It->second->Categories.push_back(Record);
 
   return Record;
 }
@@ -312,7 +296,6 @@
 void ObjCInstanceMethodRecord::anchor() {}
 void ObjCClassMethodRecord::anchor() {}
 void ObjCCategoryRecord::anchor() {}
-void ObjCCategoryModuleRecord::anchor() {}
 void ObjCInterfaceRecord::anchor() {}
 void ObjCProtocolRecord::anchor() {}
 void MacroDefinitionRecord::anchor() {}
Index: clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
===================================================================
--- clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
+++ clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
@@ -21,6 +21,7 @@
 #include "clang/ExtractAPI/APIIgnoresList.h"
 #include "clang/ExtractAPI/Serialization/SerializerBase.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringSet.h"
 #include "llvm/Support/JSON.h"
 #include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/raw_ostream.h"
@@ -147,6 +148,8 @@
 
   SymbolGraphSerializerOption Options;
 
+  llvm::StringSet<> visitedCategories;
+
 public:
   /// Visit a global function record.
   void visitGlobalFunctionRecord(const GlobalFunctionRecord &Record);
@@ -166,9 +169,6 @@
   /// Visit an Objective-C category record.
   void visitObjCCategoryRecord(const ObjCCategoryRecord &Record);
 
-  /// Visit an Objective-C category module record.
-  void visitObjCCategoryModuleRecord(const ObjCCategoryModuleRecord &Record);
-
   /// Visit a macro definition record.
   void visitMacroDefinitionRecord(const MacroDefinitionRecord &Record);
 
Index: clang/include/clang/ExtractAPI/Serialization/SerializerBase.h
===================================================================
--- clang/include/clang/ExtractAPI/Serialization/SerializerBase.h
+++ clang/include/clang/ExtractAPI/Serialization/SerializerBase.h
@@ -37,8 +37,6 @@
 
     getDerived()->traverseObjCCategories();
 
-    getDerived()->traverseObjCCategoryModule();
-
     getDerived()->traverseMacroDefinitionRecords();
 
     getDerived()->traverseTypedefRecords();
@@ -79,11 +77,6 @@
       getDerived()->visitObjCCategoryRecord(*Category.second);
   }
 
-  void traverseObjCCategoryModule() {
-    for (const auto &CategoryModule : API.getObjCCategoryModule())
-      getDerived()->visitObjCCategoryModuleRecord(*CategoryModule.second);
-  }
-
   void traverseMacroDefinitionRecords() {
     for (const auto &Macro : API.getMacros())
       getDerived()->visitMacroDefinitionRecord(*Macro.second);
@@ -112,9 +105,6 @@
   /// Visit an Objective-C category record.
   void visitObjCCategoryRecord(const ObjCCategoryRecord &Record){};
 
-  /// Visit an Objective-C category module record.
-  void visitObjCCategoryModuleRecord(const ObjCCategoryModuleRecord &Record){};
-
   /// Visit a macro definition record.
   void visitMacroDefinitionRecord(const MacroDefinitionRecord &Record){};
 
Index: clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
===================================================================
--- clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
+++ clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
@@ -125,15 +125,6 @@
   }
 }
 
-template <typename T>
-static bool isExternalCategory(const T &Records, const StringRef &Name) {
-  for (const auto &Record : Records) {
-    if (Name == Record.second.get()->Name)
-      return false;
-  }
-  return true;
-}
-
 template <typename Derived>
 bool ExtractAPIVisitorBase<Derived>::VisitVarDecl(const VarDecl *Decl) {
   // skip function parameters.
@@ -493,12 +484,13 @@
   SymbolReference Interface(InterfaceDecl->getName(),
                             API.recordUSR(InterfaceDecl));
 
-  bool IsFromExternalModule =
-      isExternalCategory(API.getObjCInterfaces(), InterfaceDecl->getName());
-
-  if (IsFromExternalModule)
-    API.addObjCCategoryModule(InterfaceDecl->getName(),
-                              API.recordUSR(InterfaceDecl));
+  bool IsFromExternalModule = true;
+  for (const auto &Interface : API.getObjCInterfaces()) {
+    if (InterfaceDecl->getName() == Interface.second.get()->Name) {
+      IsFromExternalModule = false;
+      break;
+    }
+  }
 
   ObjCCategoryRecord *ObjCCategoryRecord = API.addObjCCategory(
       Name, USR, Loc, AvailabilitySet(Decl), Comment, Declaration, SubHeading,
Index: clang/include/clang/ExtractAPI/API.h
===================================================================
--- clang/include/clang/ExtractAPI/API.h
+++ clang/include/clang/ExtractAPI/API.h
@@ -494,21 +494,6 @@
   virtual void anchor();
 };
 
-struct ObjCCategoryModuleRecord : APIRecord {
-  // ObjCCategoryRecord%s are stored in and owned by APISet.
-  SmallVector<ObjCCategoryRecord *> Categories;
-
-  ObjCCategoryModuleRecord(StringRef USR, StringRef Name)
-      : APIRecord(RK_ObjCCategoryModule, USR, Name) {}
-
-  static bool classof(const APIRecord *Record) {
-    return Record->getKind() == RK_ObjCCategoryModule;
-  }
-
-private:
-  virtual void anchor();
-};
-
 /// This holds information associated with Objective-C interfaces/classes.
 struct ObjCInterfaceRecord : ObjCContainerRecord {
   SymbolReference SuperClass;
@@ -689,9 +674,6 @@
                           DeclarationFragments SubHeading,
                           bool IsFromSystemHeader);
 
-  ObjCCategoryModuleRecord *addObjCCategoryModule(StringRef Name,
-                                                  StringRef USR);
-
   /// Create and add an Objective-C category record into the API set.
   ///
   /// Note: the caller is responsible for keeping the StringRef \p Name and
@@ -819,9 +801,6 @@
   const RecordMap<ObjCCategoryRecord> &getObjCCategories() const {
     return ObjCCategories;
   }
-  const RecordMap<ObjCCategoryModuleRecord> &getObjCCategoryModule() const {
-    return ObjCCategoryModule;
-  }
   const RecordMap<ObjCInterfaceRecord> &getObjCInterfaces() const {
     return ObjCInterfaces;
   }
@@ -875,7 +854,6 @@
   RecordMap<EnumRecord> Enums;
   RecordMap<StructRecord> Structs;
   RecordMap<ObjCCategoryRecord> ObjCCategories;
-  RecordMap<ObjCCategoryModuleRecord> ObjCCategoryModule;
   RecordMap<ObjCInterfaceRecord> ObjCInterfaces;
   RecordMap<ObjCProtocolRecord> ObjCProtocols;
   RecordMap<MacroDefinitionRecord> Macros;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to