CurrentDecl = CommentDecl;
Decl::Kind K = CommentDecl->getKind();
+ const TypeSourceInfo *TSI = nullptr;
switch (K) {
default:
// Defaults are should be good for declarations we don't handle explicitly.
case Decl::EnumConstant:
case Decl::ObjCIvar:
case Decl::ObjCAtDefsField:
- case Decl::ObjCProperty: {
- const TypeSourceInfo *TSI;
+ case Decl::ObjCProperty:
if (const auto *VD = dyn_cast<DeclaratorDecl>(CommentDecl))
TSI = VD->getTypeSourceInfo();
else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(CommentDecl))
TSI = PD->getTypeSourceInfo();
- else
- TSI = nullptr;
- if (TSI) {
- TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc();
- FunctionTypeLoc FTL;
- if (getFunctionTypeLoc(TL, FTL)) {
- ParamVars = FTL.getParams();
- ReturnType = FTL.getReturnLoc().getType();
- }
- }
Kind = VariableKind;
break;
- }
case Decl::Namespace:
Kind = NamespaceKind;
break;
case Decl::TypeAlias:
- case Decl::Typedef: {
+ case Decl::Typedef:
Kind = TypedefKind;
- // If this is a typedef / using to something we consider a function, extract
- // arguments and return type.
- const TypeSourceInfo *TSI =
- K == Decl::Typedef
- ? cast<TypedefDecl>(CommentDecl)->getTypeSourceInfo()
- : cast<TypeAliasDecl>(CommentDecl)->getTypeSourceInfo();
- if (!TSI)
- break;
- TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc();
- FunctionTypeLoc FTL;
- if (getFunctionTypeLoc(TL, FTL)) {
- Kind = FunctionKind;
- ParamVars = FTL.getParams();
- ReturnType = FTL.getReturnLoc().getType();
- }
+ TSI = cast<TypedefNameDecl>(CommentDecl)->getTypeSourceInfo();
break;
- }
case Decl::TypeAliasTemplate: {
const TypeAliasTemplateDecl *TAT = cast<TypeAliasTemplateDecl>(CommentDecl);
Kind = TypedefKind;
TemplateKind = Template;
TemplateParameters = TAT->getTemplateParameters();
- TypeAliasDecl *TAD = TAT->getTemplatedDecl();
- if (!TAD)
- break;
+ if (TypeAliasDecl *TAD = TAT->getTemplatedDecl())
+ TSI = TAD->getTypeSourceInfo();
+ break;
+ }
+ case Decl::Enum:
+ Kind = EnumKind;
+ break;
+ }
- const TypeSourceInfo *TSI = TAD->getTypeSourceInfo();
- if (!TSI)
- break;
+ // If the type is a typedef / using to something we consider a function,
+ // extract arguments and return type.
+ if (TSI) {
TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc();
FunctionTypeLoc FTL;
if (getFunctionTypeLoc(TL, FTL)) {
- Kind = FunctionKind;
+ if (Kind == TypedefKind)
+ Kind = FunctionKind;
ParamVars = FTL.getParams();
ReturnType = FTL.getReturnLoc().getType();
}
- break;
- }
- case Decl::Enum:
- Kind = EnumKind;
- break;
}
IsFilled = true;