[index] Add SymbolSubKinds for ObjC IB annotations.

llvm-svn: 267118
diff --git a/clang/lib/Index/IndexSymbol.cpp b/clang/lib/Index/IndexSymbol.cpp
index ba83d0c..13a8452 100644
--- a/clang/lib/Index/IndexSymbol.cpp
+++ b/clang/lib/Index/IndexSymbol.cpp
@@ -40,6 +40,15 @@
   return isUnitTestCase(D->getClassInterface());
 }
 
+static void checkForIBOutlets(const Decl *D, SymbolSubKindSet &SubKindSet) {
+  if (D->hasAttr<IBOutletAttr>()) {
+    SubKindSet |= (unsigned)SymbolSubKind::IBAnnotated;
+  } else if (D->hasAttr<IBOutletCollectionAttr>()) {
+    SubKindSet |= (unsigned)SymbolSubKind::IBAnnotated;
+    SubKindSet |= (unsigned)SymbolSubKind::IBOutletCollection;
+  }
+}
+
 SymbolInfo index::getSymbolInfo(const Decl *D) {
   assert(D);
   SymbolInfo Info;
@@ -135,14 +144,18 @@
       Info.Lang = SymbolLanguage::ObjC;
       if (isUnitTest(cast<ObjCMethodDecl>(D)))
         Info.SubKinds |= (unsigned)SymbolSubKind::UnitTest;
+      if (D->hasAttr<IBActionAttr>())
+        Info.SubKinds |= (unsigned)SymbolSubKind::IBAnnotated;
       break;
     case Decl::ObjCProperty:
       Info.Kind = SymbolKind::InstanceProperty;
       Info.Lang = SymbolLanguage::ObjC;
+      checkForIBOutlets(D, Info.SubKinds);
       break;
     case Decl::ObjCIvar:
       Info.Kind = SymbolKind::Field;
       Info.Lang = SymbolLanguage::ObjC;
+      checkForIBOutlets(D, Info.SubKinds);
       break;
     case Decl::Namespace:
       Info.Kind = SymbolKind::Namespace;
@@ -347,6 +360,8 @@
   APPLY_FOR_SUBKIND(TemplatePartialSpecialization);
   APPLY_FOR_SUBKIND(TemplateSpecialization);
   APPLY_FOR_SUBKIND(UnitTest);
+  APPLY_FOR_SUBKIND(IBAnnotated);
+  APPLY_FOR_SUBKIND(IBOutletCollection);
 
 #undef APPLY_FOR_SUBKIND
 }
@@ -363,6 +378,8 @@
     case SymbolSubKind::TemplatePartialSpecialization: OS << "TPS"; break;
     case SymbolSubKind::TemplateSpecialization: OS << "TS"; break;
     case SymbolSubKind::UnitTest: OS << "test"; break;
+    case SymbolSubKind::IBAnnotated: OS << "IB"; break;
+    case SymbolSubKind::IBOutletCollection: OS << "IBColl"; break;
     }
   });
 }