Skip to content

Commit 6deff88

Browse files
evelez7daniel-grumberg
authored andcommitted
[clang][ExtractAPI] Refactor C++ method and field visitation
Refactor visitation for C++ record children by following the Visitor's CRTP. Expand VisitCXXField, VisitCXXMethod for non-templates and introduce VisitCXXConstructor, VisitCXXDestructor. Handle relationships by finding the parent's Record via USR from DeclContext. Depends on D158029 Reviewed By: dang Differential Revision: https://reviews.llvm.org/D158031
1 parent cd3f992 commit 6deff88

File tree

8 files changed

+326
-275
lines changed

8 files changed

+326
-275
lines changed

clang/include/clang/ExtractAPI/API.h

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,7 +1111,9 @@ struct has_function_signature<ObjCInstanceMethodRecord>
11111111
template <>
11121112
struct has_function_signature<ObjCClassMethodRecord> : public std::true_type {};
11131113
template <>
1114-
struct has_function_signature<CXXMethodRecord> : public std::true_type {};
1114+
struct has_function_signature<CXXInstanceMethodRecord> : public std::true_type {};
1115+
template <>
1116+
struct has_function_signature<CXXStaticMethodRecord> : public std::true_type {};
11151117
template <>
11161118
struct has_function_signature<CXXMethodTemplateRecord> : public std::true_type {
11171119
};
@@ -1120,7 +1122,8 @@ struct has_function_signature<CXXMethodTemplateSpecializationRecord>
11201122
: public std::true_type {};
11211123

11221124
template <typename RecordTy> struct has_access : public std::false_type {};
1123-
template <> struct has_access<CXXMethodRecord> : public std::true_type {};
1125+
template <> struct has_access<CXXInstanceMethodRecord> : public std::true_type {};
1126+
template <> struct has_access<CXXStaticMethodRecord> : public std::true_type {};
11241127
template <> struct has_access<CXXFieldRecord> : public std::true_type {};
11251128
template <>
11261129
struct has_access<CXXMethodTemplateRecord> : public std::true_type {};
@@ -1261,7 +1264,7 @@ class APISet {
12611264
DeclarationFragments SubHeading, SymbolReference Context,
12621265
AccessControl Access, bool IsFromSystemHeaderg);
12631266

1264-
CXXFieldRecord *addCXXField(CXXClassRecord *CXXClass, StringRef Name,
1267+
CXXFieldRecord *addCXXField(APIRecord *CXXClass, StringRef Name,
12651268
StringRef USR, PresumedLoc Loc,
12661269
AvailabilitySet Availabilities,
12671270
const DocComment &Comment,
@@ -1316,18 +1319,25 @@ class APISet {
13161319
DeclarationFragments SubHeading, Template Template,
13171320
bool IsFromSystemHeader);
13181321

1319-
CXXMethodRecord *
1320-
addCXXMethod(CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR,
1321-
PresumedLoc Loc, AvailabilitySet Availability,
1322-
const DocComment &Comment, DeclarationFragments Declaration,
1323-
DeclarationFragments SubHeading, FunctionSignature Signature,
1324-
bool IsStatic, AccessControl Access, bool IsFromSystemHeader);
1322+
CXXMethodRecord *addCXXInstanceMethod(
1323+
APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1324+
AvailabilitySet Availability, const DocComment &Comment,
1325+
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1326+
FunctionSignature Signature, AccessControl Access,
1327+
bool IsFromSystemHeader);
1328+
1329+
CXXMethodRecord *addCXXStaticMethod(
1330+
APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1331+
AvailabilitySet Availability, const DocComment &Comment,
1332+
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1333+
FunctionSignature Signature, AccessControl Access,
1334+
bool IsFromSystemHeader);
13251335

13261336
CXXMethodRecord *addCXXSpecialMethod(
1327-
CXXClassRecord *CXXClassRecord, StringRef Name, StringRef USR,
1328-
PresumedLoc Loc, AvailabilitySet Availability, const DocComment &Comment,
1337+
APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1338+
AvailabilitySet Availability, const DocComment &Comment,
13291339
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1330-
FunctionSignature Signature, bool IsConstructor, AccessControl Access,
1340+
FunctionSignature Signature, AccessControl Access,
13311341
bool IsFromSystemHeader);
13321342

13331343
CXXMethodTemplateRecord *addCXXMethodTemplate(
@@ -1502,6 +1512,13 @@ class APISet {
15021512
const RecordMap<CXXMethodTemplateRecord> &getCXXMethodTemplates() const {
15031513
return CXXMethodTemplates;
15041514
}
1515+
const RecordMap<CXXInstanceMethodRecord> &getCXXInstanceMethods() const {
1516+
return CXXInstanceMethods;
1517+
}
1518+
const RecordMap<CXXStaticMethodRecord> &getCXXStaticMethods() const {
1519+
return CXXStaticMethods;
1520+
}
1521+
const RecordMap<CXXFieldRecord> &getCXXFields() const { return CXXFields; }
15051522
const RecordMap<CXXMethodTemplateSpecializationRecord> &
15061523
getCXXMethodTemplateSpecializations() const {
15071524
return CXXMethodTemplateSpecializations;
@@ -1588,6 +1605,10 @@ class APISet {
15881605
RecordMap<EnumRecord> Enums;
15891606
RecordMap<StructRecord> Structs;
15901607
RecordMap<CXXClassRecord> CXXClasses;
1608+
RecordMap<CXXFieldRecord> CXXFields;
1609+
RecordMap<CXXMethodRecord> CXXMethods;
1610+
RecordMap<CXXInstanceMethodRecord> CXXInstanceMethods;
1611+
RecordMap<CXXStaticMethodRecord> CXXStaticMethods;
15911612
RecordMap<CXXMethodTemplateRecord> CXXMethodTemplates;
15921613
RecordMap<CXXMethodTemplateSpecializationRecord>
15931614
CXXMethodTemplateSpecializations;

0 commit comments

Comments
 (0)