[libclang] Slight changes to the indexing API and bigger internal changes for it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144577 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index ae970fb..177ffa5 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1624,7 +1624,8 @@
   case CXIdxEntity_ObjCClass: return "objc-class";
   case CXIdxEntity_ObjCProtocol: return "objc-protocol";
   case CXIdxEntity_ObjCCategory: return "objc-category";
-  case CXIdxEntity_ObjCMethod: return "objc-method";
+  case CXIdxEntity_ObjCInstanceMethod: return "objc-instance-method";
+  case CXIdxEntity_ObjCClassMethod: return "objc-class-method";
   case CXIdxEntity_ObjCProperty: return "objc-property";
   case CXIdxEntity_ObjCIvar: return "objc-ivar";
   case CXIdxEntity_Enum: return "enum";
@@ -1653,6 +1654,20 @@
   printf(" | USR: %s", info->USR);
 }
 
+static void printProtocolList(const CXIdxObjCProtocolRefListInfo *ProtoInfo,
+                              CXClientData client_data) {
+  unsigned i;
+  for (i = 0; i < ProtoInfo->numProtocols; ++i) {
+    printEntityInfo("     <protocol>", client_data,
+                    ProtoInfo->protocols[i]->protocol);
+    printf(" | cursor: ");
+    PrintCursor(ProtoInfo->protocols[i]->cursor);
+    printf(" | loc: ");
+    printCXIndexLoc(ProtoInfo->protocols[i]->loc);
+    printf("\n");
+  }
+}
+
 static void index_diagnostic(CXClientData client_data,
                              CXDiagnostic diag, void *reserved) {
   CXString str;
@@ -1717,8 +1732,7 @@
   IndexData *index_data;
   const CXIdxObjCCategoryDeclInfo *CatInfo;
   const CXIdxObjCInterfaceDeclInfo *InterInfo;
-  const CXIdxObjCProtocolDeclInfo *ProtoInfo;
-  unsigned i;
+  const CXIdxObjCProtocolRefListInfo *ProtoInfo;
   index_data = (IndexData *)client_data;
 
   printEntityInfo("[indexDeclaration]", client_data, info->entityInfo);
@@ -1729,7 +1743,9 @@
   printf(" | container: ");
   printCXIndexContainer(info->container);
   printf(" | isRedecl: %d", info->isRedeclaration);
-  printf(" | isDef: %d\n", info->isDefinition);
+  printf(" | isDef: %d", info->isDefinition);
+  printf(" | isContainer: %d", info->isContainer);
+  printf(" | isImplicit: %d\n", info->isImplicit);
 
   if (clang_index_isEntityObjCContainerKind(info->entityInfo->kind)) {
     const char *kindName = 0;
@@ -1754,7 +1770,7 @@
 
   if ((InterInfo = clang_index_getObjCInterfaceDeclInfo(info))) {
     if (InterInfo->superInfo) {
-      printEntityInfo("     <ObjCInterfaceInfo>: base", client_data,
+      printEntityInfo("     <base>", client_data,
                       InterInfo->superInfo->base);
       printf(" | cursor: ");
       PrintCursor(InterInfo->superInfo->cursor);
@@ -1762,27 +1778,10 @@
       printCXIndexLoc(InterInfo->superInfo->loc);
       printf("\n");
     }
-    for (i = 0; i < InterInfo->numProtocols; ++i) {
-      printEntityInfo("     <ObjCInterfaceInfo>: protocol", client_data,
-                      InterInfo->protocols[i]->protocol);
-      printf(" | cursor: ");
-      PrintCursor(InterInfo->protocols[i]->cursor);
-      printf(" | loc: ");
-      printCXIndexLoc(InterInfo->protocols[i]->loc);
-      printf("\n");
-    }
   }
 
-  if ((ProtoInfo = clang_index_getObjCProtocolDeclInfo(info))) {
-    for (i = 0; i < ProtoInfo->numProtocols; ++i) {
-      printEntityInfo("     <ObjCProtocolInfo>: protocol", client_data,
-                      ProtoInfo->protocols[i]->protocol);
-      printf(" | cursor: ");
-      PrintCursor(ProtoInfo->protocols[i]->cursor);
-      printf(" | loc: ");
-      printCXIndexLoc(ProtoInfo->protocols[i]->loc);
-      printf("\n");
-    }
+  if ((ProtoInfo = clang_index_getObjCProtocolRefListInfo(info))) {
+    printProtocolList(ProtoInfo, client_data);
   }
 
   if (outData->outContainer)
@@ -1799,7 +1798,7 @@
   printEntityInfo(" | <parent>:", client_data, info->parentEntity);
   printf(" | container: ");
   printCXIndexContainer(info->container);
-  printf(" | kind: ");
+  printf(" | refkind: ");
   switch (info->kind) {
   case CXIdxEntityRef_Direct: printf("direct"); break;
   case CXIdxEntityRef_ImplicitProperty: printf("implicit prop"); break;