diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp')
| -rw-r--r-- | contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp | 99 | 
1 files changed, 58 insertions, 41 deletions
diff --git a/contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp b/contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp index 0dc3720208ca..733d4dbc2f94 100644 --- a/contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp +++ b/contrib/llvm/tools/clang/lib/Index/IndexSymbol.cpp @@ -42,10 +42,10 @@ static bool isUnitTest(const ObjCMethodDecl *D) {  static void checkForIBOutlets(const Decl *D, SymbolPropertySet &PropSet) {    if (D->hasAttr<IBOutletAttr>()) { -    PropSet |= (unsigned)SymbolProperty::IBAnnotated; +    PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated;    } else if (D->hasAttr<IBOutletCollectionAttr>()) { -    PropSet |= (unsigned)SymbolProperty::IBAnnotated; -    PropSet |= (unsigned)SymbolProperty::IBOutletCollection; +    PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated; +    PropSet |= (SymbolPropertySet)SymbolProperty::IBOutletCollection;    }  } @@ -93,7 +93,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {    Info.Lang = SymbolLanguage::C;    if (isFunctionLocalSymbol(D)) { -    Info.Properties |= (unsigned)SymbolProperty::Local; +    Info.Properties |= (SymbolPropertySet)SymbolProperty::Local;    }    if (const TagDecl *TD = dyn_cast<TagDecl>(D)) { @@ -118,17 +118,19 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {        if (!CXXRec->isCLike()) {          Info.Lang = SymbolLanguage::CXX;          if (CXXRec->getDescribedClassTemplate()) { -          Info.Properties |= (unsigned)SymbolProperty::Generic; +          Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic;          }        }      }      if (isa<ClassTemplatePartialSpecializationDecl>(D)) { -      Info.Properties |= (unsigned)SymbolProperty::Generic; -      Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      Info.Properties |= +          (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization;      } else if (isa<ClassTemplateSpecializationDecl>(D)) { -      Info.Properties |= (unsigned)SymbolProperty::Generic; -      Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      Info.Properties |= +          (SymbolPropertySet)SymbolProperty::TemplateSpecialization;      }    } else if (auto *VD = dyn_cast<VarDecl>(D)) { @@ -142,15 +144,17 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {      if (isa<VarTemplatePartialSpecializationDecl>(D)) {        Info.Lang = SymbolLanguage::CXX; -      Info.Properties |= (unsigned)SymbolProperty::Generic; -      Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      Info.Properties |= +          (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization;      } else if (isa<VarTemplateSpecializationDecl>(D)) {        Info.Lang = SymbolLanguage::CXX; -      Info.Properties |= (unsigned)SymbolProperty::Generic; -      Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      Info.Properties |= +          (SymbolPropertySet)SymbolProperty::TemplateSpecialization;      } else if (VD->getDescribedVarTemplate()) {        Info.Lang = SymbolLanguage::CXX; -      Info.Properties |= (unsigned)SymbolProperty::Generic; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic;      }    } else { @@ -181,7 +185,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {        if (!ClsD)          ClsD = cast<ObjCImplementationDecl>(D)->getClassInterface();        if (isUnitTestCase(ClsD)) -        Info.Properties |= (unsigned)SymbolProperty::UnitTest; +        Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest;        break;      }      case Decl::ObjCProtocol: @@ -198,35 +202,32 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {        else          ClsD = cast<ObjCCategoryImplDecl>(D)->getClassInterface();        if (isUnitTestCase(ClsD)) -        Info.Properties |= (unsigned)SymbolProperty::UnitTest; +        Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest;        break;      } -    case Decl::ObjCMethod: -      if (cast<ObjCMethodDecl>(D)->isInstanceMethod()) { -        const ObjCMethodDecl *MD = cast<ObjCMethodDecl>(D); -        Info.Kind = SymbolKind::InstanceMethod; -        if (MD->isPropertyAccessor()) { -          if (MD->param_size()) -            Info.SubKind = SymbolSubKind::AccessorSetter; -          else -            Info.SubKind = SymbolSubKind::AccessorGetter; -        } -      } else { -        Info.Kind = SymbolKind::ClassMethod; +    case Decl::ObjCMethod: { +      const ObjCMethodDecl *MD = cast<ObjCMethodDecl>(D); +      Info.Kind = MD->isInstanceMethod() ? SymbolKind::InstanceMethod : SymbolKind::ClassMethod; +      if (MD->isPropertyAccessor()) { +        if (MD->param_size()) +          Info.SubKind = SymbolSubKind::AccessorSetter; +        else +          Info.SubKind = SymbolSubKind::AccessorGetter;        }        Info.Lang = SymbolLanguage::ObjC; -      if (isUnitTest(cast<ObjCMethodDecl>(D))) -        Info.Properties |= (unsigned)SymbolProperty::UnitTest; +      if (isUnitTest(MD)) +        Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest;        if (D->hasAttr<IBActionAttr>()) -        Info.Properties |= (unsigned)SymbolProperty::IBAnnotated; +        Info.Properties |= (SymbolPropertySet)SymbolProperty::IBAnnotated;        break; +    }      case Decl::ObjCProperty:        Info.Kind = SymbolKind::InstanceProperty;        Info.Lang = SymbolLanguage::ObjC;        checkForIBOutlets(D, Info.Properties);        if (auto *Annot = D->getAttr<AnnotateAttr>()) {          if (Annot->getAnnotation() == "gk_inspectable") -          Info.Properties |= (unsigned)SymbolProperty::GKInspectable; +          Info.Properties |= (SymbolPropertySet)SymbolProperty::GKInspectable;        }        break;      case Decl::ObjCIvar: @@ -271,12 +272,12 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {      }      case Decl::ClassTemplate:        Info.Kind = SymbolKind::Class; -      Info.Properties |= (unsigned)SymbolProperty::Generic; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic;        Info.Lang = SymbolLanguage::CXX;        break;      case Decl::FunctionTemplate:        Info.Kind = SymbolKind::Function; -      Info.Properties |= (unsigned)SymbolProperty::Generic; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic;        Info.Lang = SymbolLanguage::CXX;        if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(                             cast<FunctionTemplateDecl>(D)->getTemplatedDecl())) { @@ -297,12 +298,24 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {      case Decl::TypeAliasTemplate:        Info.Kind = SymbolKind::TypeAlias;        Info.Lang = SymbolLanguage::CXX; -      Info.Properties |= (unsigned)SymbolProperty::Generic; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic;        break;      case Decl::TypeAlias:        Info.Kind = SymbolKind::TypeAlias;        Info.Lang = SymbolLanguage::CXX;        break; +    case Decl::UnresolvedUsingTypename: +      Info.Kind = SymbolKind::Using; +      Info.SubKind = SymbolSubKind::UsingTypename; +      Info.Lang = SymbolLanguage::CXX; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      break; +    case Decl::UnresolvedUsingValue: +      Info.Kind = SymbolKind::Using; +      Info.SubKind = SymbolSubKind::UsingValue; +      Info.Lang = SymbolLanguage::CXX; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      break;      case Decl::Binding:        Info.Kind = SymbolKind::Variable;        Info.Lang = SymbolLanguage::CXX; @@ -318,12 +331,13 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {      if (FD->getTemplatedKind() ==            FunctionDecl::TK_FunctionTemplateSpecialization) { -      Info.Properties |= (unsigned)SymbolProperty::Generic; -      Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; +      Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; +      Info.Properties |= +          (SymbolPropertySet)SymbolProperty::TemplateSpecialization;      }    } -  if (Info.Properties & (unsigned)SymbolProperty::Generic) +  if (Info.Properties & (SymbolPropertySet)SymbolProperty::Generic)      Info.Lang = SymbolLanguage::CXX;    if (auto *attr = D->getExternalSourceSymbolAttr()) { @@ -451,6 +465,7 @@ StringRef index::getSymbolKindString(SymbolKind K) {    case SymbolKind::Destructor: return "destructor";    case SymbolKind::ConversionFunction: return "coversion-func";    case SymbolKind::Parameter: return "param"; +  case SymbolKind::Using: return "using";    }    llvm_unreachable("invalid symbol kind");  } @@ -462,6 +477,8 @@ StringRef index::getSymbolSubKindString(SymbolSubKind K) {    case SymbolSubKind::CXXMoveConstructor: return "cxx-move-ctor";    case SymbolSubKind::AccessorGetter: return "acc-get";    case SymbolSubKind::AccessorSetter: return "acc-set"; +  case SymbolSubKind::UsingTypename: return "using-typename"; +  case SymbolSubKind::UsingValue: return "using-value";    }    llvm_unreachable("invalid symbol subkind");  } @@ -478,9 +495,9 @@ StringRef index::getSymbolLanguageString(SymbolLanguage K) {  void index::applyForEachSymbolProperty(SymbolPropertySet Props,                                    llvm::function_ref<void(SymbolProperty)> Fn) { -#define APPLY_FOR_PROPERTY(K) \ -  if (Props & (unsigned)SymbolProperty::K) \ -    Fn(SymbolProperty::K) +#define APPLY_FOR_PROPERTY(K)                                                  \ +  if (Props & (SymbolPropertySet)SymbolProperty::K)                            \ +  Fn(SymbolProperty::K)    APPLY_FOR_PROPERTY(Generic);    APPLY_FOR_PROPERTY(TemplatePartialSpecialization);  | 
