[libclang] Further simplify the indexing API.

That stuff can be added later on if we need them.
Also add some const goodness.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144446 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 833c5b4..ac2ab4f 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1577,7 +1577,8 @@
   printf("%d:%d", line, column);
 }
 
-static CXIdxClientEntity makeClientEntity(CXIdxEntityInfo *info, CXIdxLoc loc) {
+static CXIdxClientContainer makeClientContainer(const CXIdxEntityInfo *info,
+                                                CXIdxLoc loc) {
   const char *name;
   char *newStr;
   CXIdxClientFile file;
@@ -1591,7 +1592,7 @@
   /* FIXME: free these.*/
   newStr = (char *)malloc(strlen(name) + 10);
   sprintf(newStr, "%s:%d:%d", name, line, column);
-  return (CXIdxClientEntity)newStr;
+  return (CXIdxClientContainer)newStr;
 }
 
 static void printCXIndexContainer(CXIdxClientContainer container) {
@@ -1617,12 +1618,13 @@
   case CXIdxEntity_Union: return "union";
   case CXIdxEntity_CXXClass: return "c++-class";
   }
-  return "<unknown>";
+  assert(0 && "Garbage entity kind");
+  return 0;
 }
 
 static void printEntityInfo(const char *cb,
                             CXClientData client_data,
-                            CXIdxEntityInfo *info) {
+                            const CXIdxEntityInfo *info) {
   const char *name;
   IndexData *index_data;
   index_data = (IndexData *)client_data;
@@ -1670,7 +1672,7 @@
 }
 
 static CXIdxClientFile index_ppIncludedFile(CXClientData client_data,
-                                      CXIdxIncludedFileInfo *info) {
+                                            const CXIdxIncludedFileInfo *info) {
   IndexData *index_data;
   index_data = (IndexData *)client_data;
   printCheck(index_data);
@@ -1685,62 +1687,6 @@
   return (CXIdxClientFile)info->file;
 }
 
-static CXIdxClientMacro index_ppMacroDefined(CXClientData client_data,
-                                       CXIdxMacroDefinedInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[ppMacroDefined]: %s", info->macroInfo->name);
-  printf(" | loc: ");
-  printCXIndexLoc(info->macroInfo->loc);
-  printf(" | defBegin: ");
-  printCXIndexLoc(info->defBegin);
-  printf(" | length: %d\n", info->defLength);
-
-  return (CXIdxClientMacro)info->macroInfo->name;
-}
-
-static void index_ppMacroUndefined(CXClientData client_data,
-                                         CXIdxMacroUndefinedInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[ppMacroUndefined]: %s", info->name);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
-  printf("\n");
-}
-
-static void index_ppMacroExpanded(CXClientData client_data,
-                                        CXIdxMacroExpandedInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[ppMacroExpanded]: %s", info->name);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
-  printf("\n");
-}
-
-static CXIdxClientEntity index_importedEntity(CXClientData client_data,
-                                        CXIdxImportedEntityInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printEntityInfo("[importedEntity]", client_data, info->entityInfo);
-  printf(" | cursor: ");
-  PrintCursor(info->cursor);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
-  printf("\n");
-
-  return makeClientEntity(info->entityInfo, info->loc);
-}
-
 static CXIdxClientContainer index_startedTranslationUnit(CXClientData client_data,
                                                    void *reserved) {
   IndexData *index_data;
@@ -1751,9 +1697,14 @@
   return (CXIdxClientContainer)"TU";
 }
 
-static CXIdxClientEntity index_indexDeclaration(CXClientData client_data,
-                                                    CXIdxDeclInfo *info) {
+static void index_indexDeclaration(CXClientData client_data,
+                                   const CXIdxDeclInfo *info,
+                                   const CXIdxDeclOut *outData) {
   IndexData *index_data;
+  const CXIdxObjCCategoryDeclInfo *CatInfo;
+  const CXIdxObjCInterfaceDeclInfo *InterInfo;
+  const CXIdxObjCProtocolDeclInfo *ProtoInfo;
+  unsigned i;
   index_data = (IndexData *)client_data;
 
   printEntityInfo("[indexDeclaration]", client_data, info->entityInfo);
@@ -1766,13 +1717,6 @@
   printf(" | isRedecl: %d", info->isRedeclaration);
   printf(" | isDef: %d\n", info->isDefinition);
 
-  
-  if (clang_index_isEntityTagKind(info->entityInfo->kind)) {
-    printCheck(index_data);
-    printf("     <TagInfo>: isAnonymous: %d\n",
-           clang_index_getTagDeclInfo(info)->isAnonymous);
-  }
-
   if (clang_index_isEntityObjCContainerKind(info->entityInfo->kind)) {
     const char *kindName = 0;
     CXIdxObjCContainerKind K = clang_index_getObjCContainerDeclInfo(info)->kind;
@@ -1788,64 +1732,51 @@
     printf("     <ObjCContainerInfo>: kind: %s\n", kindName);
   }
 
-  if (clang_index_isEntityObjCCategoryKind(info->entityInfo->kind)) {
-    CXIdxObjCCategoryDeclInfo *
-      CatInfo = clang_index_getObjCCategoryDeclInfo(info);
+  if ((CatInfo = clang_index_getObjCCategoryDeclInfo(info))) {
     printEntityInfo("     <ObjCCategoryInfo>: class", client_data,
                     CatInfo->objcClass);
     printf("\n");
   }
 
-  if (!info->isRedeclaration)
-    return makeClientEntity(info->entityInfo, info->loc);
-
-  return 0;
-}
-
-static CXIdxClientContainer
-index_startedContainer(CXClientData client_data, CXIdxContainerInfo *info) {
-  printEntityInfo("[startedContainer]", client_data, info->entity);
-  printf(" | cursor: ");
-  PrintCursor(info->cursor);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
-  printf(" | isObjCImpl: %d\n", info->isObjCImpl);
-
-  return (CXIdxClientContainer)info->entity->clientEntity;
-}
-
-static void index_defineObjCClass(CXClientData client_data,
-                                  CXIdxObjCClassDefineInfo *info) {
-  printEntityInfo("[defineObjCClass]", client_data, info->objcClass);
-  printf(" | cursor: ");
-  PrintCursor(info->cursor);
-  printf(" | container: ");
-  printCXIndexContainer(info->container);
-  
-  if (info->baseInfo) {
-    printEntityInfo(" | <base>", client_data, info->baseInfo->objcClass);
-    printf(" | base loc: ");
-    printCXIndexLoc(info->baseInfo->loc);
+  if ((InterInfo = clang_index_getObjCInterfaceDeclInfo(info))) {
+    if (InterInfo->superInfo) {
+      printEntityInfo("     <ObjCInterfaceInfo>: base", client_data,
+                      InterInfo->superInfo->base);
+      printf(" | cursor: ");
+      PrintCursor(InterInfo->superInfo->cursor);
+      printf(" | loc: ");
+      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");
+    }
   }
 
-  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");
+    }
+  }
 
-static void index_endedContainer(CXClientData client_data,
-                                 CXIdxEndContainerInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[endedContainer]: ");
-  printCXIndexContainer(info->container);
-  printf(" | end: ");
-  printCXIndexLoc(info->endLoc);
-  printf("\n");
+  if (outData->outContainer)
+    *outData->outContainer = makeClientContainer(info->entityInfo, info->loc);
 }
 
 static void index_indexEntityReference(CXClientData client_data,
-                                       CXIdxEntityRefInfo *info) {
+                                       const CXIdxEntityRefInfo *info) {
   printEntityInfo("[indexEntityReference]", client_data, info->referencedEntity);
   printf(" | cursor: ");
   PrintCursor(info->cursor);
@@ -1863,20 +1794,13 @@
 }
 
 static IndexerCallbacks IndexCB = {
+  0, /*abortQuery*/
   index_diagnostic,
   index_enteredMainFile,
   index_ppIncludedFile,
-  index_ppMacroDefined,
-  index_ppMacroUndefined,
-  index_ppMacroExpanded,
   0, /*importedASTFile*/
-  index_importedEntity,
-  0,/*index_importedMacro,*/
   index_startedTranslationUnit,
   index_indexDeclaration,
-  index_startedContainer,
-  index_defineObjCClass,
-  index_endedContainer,
   index_indexEntityReference
 };