[index] Rename SymbolSubKind -> SymbolProperty, NFC.

This better reflects what it represents.

llvm-svn: 286680
This commit is contained in:
Argyrios Kyrtzidis 2016-11-11 23:49:55 +00:00
parent e0c7500735
commit db4698352e
4 changed files with 66 additions and 65 deletions

View File

@ -59,7 +59,8 @@ enum class SymbolLanguage {
CXX,
};
enum class SymbolSubKind : uint8_t {
/// Set of properties that provide additional info about a symbol.
enum class SymbolProperty : uint8_t {
Generic = 1 << 0,
TemplatePartialSpecialization = 1 << 1,
TemplateSpecialization = 1 << 2,
@ -68,8 +69,8 @@ enum class SymbolSubKind : uint8_t {
IBOutletCollection = 1 << 5,
GKInspectable = 1 << 6,
};
static const unsigned SymbolSubKindBitNum = 7;
typedef unsigned SymbolSubKindSet;
static const unsigned SymbolPropertyBitNum = 7;
typedef unsigned SymbolPropertySet;
/// Set of roles that are attributed to symbol occurrences.
enum class SymbolRole : uint16_t {
@ -106,7 +107,7 @@ struct SymbolRelation {
struct SymbolInfo {
SymbolKind Kind;
SymbolSubKindSet SubKinds;
SymbolPropertySet Properties;
SymbolLanguage Lang;
};
@ -122,9 +123,9 @@ bool printSymbolName(const Decl *D, const LangOptions &LO, raw_ostream &OS);
StringRef getSymbolKindString(SymbolKind K);
StringRef getSymbolLanguageString(SymbolLanguage K);
void applyForEachSymbolSubKind(SymbolSubKindSet SubKinds,
llvm::function_ref<void(SymbolSubKind)> Fn);
void printSymbolSubKinds(SymbolSubKindSet SubKinds, raw_ostream &OS);
void applyForEachSymbolProperty(SymbolPropertySet Props,
llvm::function_ref<void(SymbolProperty)> Fn);
void printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS);
} // namespace index
} // namespace clang

View File

@ -40,12 +40,12 @@ static bool isUnitTest(const ObjCMethodDecl *D) {
return isUnitTestCase(D->getClassInterface());
}
static void checkForIBOutlets(const Decl *D, SymbolSubKindSet &SubKindSet) {
static void checkForIBOutlets(const Decl *D, SymbolPropertySet &PropSet) {
if (D->hasAttr<IBOutletAttr>()) {
SubKindSet |= (unsigned)SymbolSubKind::IBAnnotated;
PropSet |= (unsigned)SymbolProperty::IBAnnotated;
} else if (D->hasAttr<IBOutletCollectionAttr>()) {
SubKindSet |= (unsigned)SymbolSubKind::IBAnnotated;
SubKindSet |= (unsigned)SymbolSubKind::IBOutletCollection;
PropSet |= (unsigned)SymbolProperty::IBAnnotated;
PropSet |= (unsigned)SymbolProperty::IBOutletCollection;
}
}
@ -53,7 +53,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
assert(D);
SymbolInfo Info;
Info.Kind = SymbolKind::Unknown;
Info.SubKinds = SymbolSubKindSet();
Info.Properties = SymbolPropertySet();
Info.Lang = SymbolLanguage::C;
if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
@ -78,17 +78,17 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
if (!CXXRec->isCLike()) {
Info.Lang = SymbolLanguage::CXX;
if (CXXRec->getDescribedClassTemplate()) {
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.Properties |= (unsigned)SymbolProperty::Generic;
}
}
}
if (isa<ClassTemplatePartialSpecializationDecl>(D)) {
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.SubKinds |= (unsigned)SymbolSubKind::TemplatePartialSpecialization;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization;
} else if (isa<ClassTemplateSpecializationDecl>(D)) {
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.SubKinds |= (unsigned)SymbolSubKind::TemplateSpecialization;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization;
}
} else if (auto *VD = dyn_cast<VarDecl>(D)) {
@ -99,15 +99,15 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
}
if (isa<VarTemplatePartialSpecializationDecl>(D)) {
Info.Lang = SymbolLanguage::CXX;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.SubKinds |= (unsigned)SymbolSubKind::TemplatePartialSpecialization;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization;
} else if (isa<VarTemplateSpecializationDecl>(D)) {
Info.Lang = SymbolLanguage::CXX;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.SubKinds |= (unsigned)SymbolSubKind::TemplateSpecialization;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization;
} else if (VD->getDescribedVarTemplate()) {
Info.Lang = SymbolLanguage::CXX;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.Properties |= (unsigned)SymbolProperty::Generic;
}
} else {
@ -138,7 +138,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
if (!ClsD)
ClsD = cast<ObjCImplementationDecl>(D)->getClassInterface();
if (isUnitTestCase(ClsD))
Info.SubKinds |= (unsigned)SymbolSubKind::UnitTest;
Info.Properties |= (unsigned)SymbolProperty::UnitTest;
break;
}
case Decl::ObjCProtocol:
@ -157,23 +157,23 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
Info.Kind = SymbolKind::ClassMethod;
Info.Lang = SymbolLanguage::ObjC;
if (isUnitTest(cast<ObjCMethodDecl>(D)))
Info.SubKinds |= (unsigned)SymbolSubKind::UnitTest;
Info.Properties |= (unsigned)SymbolProperty::UnitTest;
if (D->hasAttr<IBActionAttr>())
Info.SubKinds |= (unsigned)SymbolSubKind::IBAnnotated;
Info.Properties |= (unsigned)SymbolProperty::IBAnnotated;
break;
case Decl::ObjCProperty:
Info.Kind = SymbolKind::InstanceProperty;
Info.Lang = SymbolLanguage::ObjC;
checkForIBOutlets(D, Info.SubKinds);
checkForIBOutlets(D, Info.Properties);
if (auto *Annot = D->getAttr<AnnotateAttr>()) {
if (Annot->getAnnotation() == "gk_inspectable")
Info.SubKinds |= (unsigned)SymbolSubKind::GKInspectable;
Info.Properties |= (unsigned)SymbolProperty::GKInspectable;
}
break;
case Decl::ObjCIvar:
Info.Kind = SymbolKind::Field;
Info.Lang = SymbolLanguage::ObjC;
checkForIBOutlets(D, Info.SubKinds);
checkForIBOutlets(D, Info.Properties);
break;
case Decl::Namespace:
Info.Kind = SymbolKind::Namespace;
@ -206,12 +206,12 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
}
case Decl::ClassTemplate:
Info.Kind = SymbolKind::Class;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Lang = SymbolLanguage::CXX;
break;
case Decl::FunctionTemplate:
Info.Kind = SymbolKind::Function;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Lang = SymbolLanguage::CXX;
if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(
cast<FunctionTemplateDecl>(D)->getTemplatedDecl())) {
@ -232,7 +232,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
case Decl::TypeAliasTemplate:
Info.Kind = SymbolKind::TypeAlias;
Info.Lang = SymbolLanguage::CXX;
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.Properties |= (unsigned)SymbolProperty::Generic;
break;
case Decl::TypeAlias:
Info.Kind = SymbolKind::TypeAlias;
@ -249,12 +249,12 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
if (FD->getTemplatedKind() ==
FunctionDecl::TK_FunctionTemplateSpecialization) {
Info.SubKinds |= (unsigned)SymbolSubKind::Generic;
Info.SubKinds |= (unsigned)SymbolSubKind::TemplateSpecialization;
Info.Properties |= (unsigned)SymbolProperty::Generic;
Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization;
}
}
if (Info.SubKinds & (unsigned)SymbolSubKind::Generic)
if (Info.Properties & (unsigned)SymbolProperty::Generic)
Info.Lang = SymbolLanguage::CXX;
return Info;
@ -372,38 +372,38 @@ StringRef index::getSymbolLanguageString(SymbolLanguage K) {
llvm_unreachable("invalid symbol language kind");
}
void index::applyForEachSymbolSubKind(SymbolSubKindSet SubKinds,
llvm::function_ref<void(SymbolSubKind)> Fn) {
#define APPLY_FOR_SUBKIND(K) \
if (SubKinds & (unsigned)SymbolSubKind::K) \
Fn(SymbolSubKind::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)
APPLY_FOR_SUBKIND(Generic);
APPLY_FOR_SUBKIND(TemplatePartialSpecialization);
APPLY_FOR_SUBKIND(TemplateSpecialization);
APPLY_FOR_SUBKIND(UnitTest);
APPLY_FOR_SUBKIND(IBAnnotated);
APPLY_FOR_SUBKIND(IBOutletCollection);
APPLY_FOR_SUBKIND(GKInspectable);
APPLY_FOR_PROPERTY(Generic);
APPLY_FOR_PROPERTY(TemplatePartialSpecialization);
APPLY_FOR_PROPERTY(TemplateSpecialization);
APPLY_FOR_PROPERTY(UnitTest);
APPLY_FOR_PROPERTY(IBAnnotated);
APPLY_FOR_PROPERTY(IBOutletCollection);
APPLY_FOR_PROPERTY(GKInspectable);
#undef APPLY_FOR_SUBKIND
#undef APPLY_FOR_PROPERTY
}
void index::printSymbolSubKinds(SymbolSubKindSet SubKinds, raw_ostream &OS) {
void index::printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS) {
bool VisitedOnce = false;
applyForEachSymbolSubKind(SubKinds, [&](SymbolSubKind SubKind) {
applyForEachSymbolProperty(Props, [&](SymbolProperty Prop) {
if (VisitedOnce)
OS << ',';
else
VisitedOnce = true;
switch (SubKind) {
case SymbolSubKind::Generic: OS << "Gen"; break;
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;
case SymbolSubKind::GKInspectable: OS << "GKI"; break;
switch (Prop) {
case SymbolProperty::Generic: OS << "Gen"; break;
case SymbolProperty::TemplatePartialSpecialization: OS << "TPS"; break;
case SymbolProperty::TemplateSpecialization: OS << "TS"; break;
case SymbolProperty::UnitTest: OS << "test"; break;
case SymbolProperty::IBAnnotated: OS << "IB"; break;
case SymbolProperty::IBOutletCollection: OS << "IBColl"; break;
case SymbolProperty::GKInspectable: OS << "GKI"; break;
}
});
}

View File

@ -167,9 +167,9 @@ static bool printSourceSymbols(ArrayRef<const char *> Args) {
static void printSymbolInfo(SymbolInfo SymInfo, raw_ostream &OS) {
OS << getSymbolKindString(SymInfo.Kind);
if (SymInfo.SubKinds) {
if (SymInfo.Properties) {
OS << '(';
printSymbolSubKinds(SymInfo.SubKinds, OS);
printSymbolProperties(SymInfo.Properties, OS);
OS << ')';
}
OS << '/' << getSymbolLanguageString(SymInfo.Lang);

View File

@ -1142,7 +1142,7 @@ void CXIndexDataConsumer::translateLoc(SourceLocation Loc,
static CXIdxEntityKind getEntityKindFromSymbolKind(SymbolKind K, SymbolLanguage L);
static CXIdxEntityCXXTemplateKind
getEntityKindFromSymbolSubKinds(SymbolSubKindSet K);
getEntityKindFromSymbolProperties(SymbolPropertySet K);
static CXIdxEntityLanguage getEntityLangFromSymbolLang(SymbolLanguage L);
void CXIndexDataConsumer::getEntityInfo(const NamedDecl *D,
@ -1158,7 +1158,7 @@ void CXIndexDataConsumer::getEntityInfo(const NamedDecl *D,
SymbolInfo SymInfo = getSymbolInfo(D);
EntityInfo.kind = getEntityKindFromSymbolKind(SymInfo.Kind, SymInfo.Lang);
EntityInfo.templateKind = getEntityKindFromSymbolSubKinds(SymInfo.SubKinds);
EntityInfo.templateKind = getEntityKindFromSymbolProperties(SymInfo.Properties);
EntityInfo.lang = getEntityLangFromSymbolLang(SymInfo.Lang);
if (D->hasAttrs()) {
@ -1298,12 +1298,12 @@ static CXIdxEntityKind getEntityKindFromSymbolKind(SymbolKind K, SymbolLanguage
}
static CXIdxEntityCXXTemplateKind
getEntityKindFromSymbolSubKinds(SymbolSubKindSet K) {
if (K & (unsigned)SymbolSubKind::TemplatePartialSpecialization)
getEntityKindFromSymbolProperties(SymbolPropertySet K) {
if (K & (unsigned)SymbolProperty::TemplatePartialSpecialization)
return CXIdxEntity_TemplatePartialSpecialization;
if (K & (unsigned)SymbolSubKind::TemplateSpecialization)
if (K & (unsigned)SymbolProperty::TemplateSpecialization)
return CXIdxEntity_TemplateSpecialization;
if (K & (unsigned)SymbolSubKind::Generic)
if (K & (unsigned)SymbolProperty::Generic)
return CXIdxEntity_Template;
return CXIdxEntity_NonTemplate;
}