Skip to content

Commit fda5ca9

Browse files
authored
Merge pull request #8803 from daniel-grumberg/cherry-picks/swift/6.0/extract-api-fixed
Cherry picks/swift/6.0/extract api fixed
2 parents 4b0b1f9 + 134ca74 commit fda5ca9

20 files changed

+626
-123
lines changed

clang/include/clang/ExtractAPI/API.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,8 @@ struct APIRecord {
266266

267267
AccessControl Access;
268268

269+
RecordKind KindForDisplay;
270+
269271
private:
270272
const RecordKind Kind;
271273
friend class RecordContext;
@@ -277,6 +279,7 @@ struct APIRecord {
277279
APIRecord *getNextInContext() const { return NextInContext; }
278280

279281
RecordKind getKind() const { return Kind; }
282+
RecordKind getKindForDisplay() const { return KindForDisplay; }
280283

281284
static APIRecord *castFromRecordContext(const RecordContext *Ctx);
282285
static RecordContext *castToRecordContext(const APIRecord *Record);
@@ -293,7 +296,10 @@ struct APIRecord {
293296
Availability(std::move(Availability)), Linkage(Linkage),
294297
Comment(Comment), Declaration(Declaration), SubHeading(SubHeading),
295298
IsFromSystemHeader(IsFromSystemHeader), Access(std::move(Access)),
296-
Kind(Kind) {}
299+
KindForDisplay(Kind), Kind(Kind) {}
300+
301+
APIRecord(RecordKind Kind, StringRef USR, StringRef Name)
302+
: USR(USR), Name(Name), KindForDisplay(Kind), Kind(Kind) {}
297303

298304
// Pure virtual destructor to make APIRecord abstract
299305
virtual ~APIRecord() = 0;

clang/include/clang/ExtractAPI/ExtractAPIVisitor.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,15 @@ class ExtractAPIVisitorBase : public RecursiveASTVisitor<Derived> {
194194
return Bases;
195195
}
196196

197+
APIRecord::RecordKind getKindForDisplay(const CXXRecordDecl *Decl) {
198+
if (Decl->isUnion())
199+
return APIRecord::RK_Union;
200+
if (Decl->isStruct())
201+
return APIRecord::RK_Struct;
202+
203+
return APIRecord::RK_CXXClass;
204+
}
205+
197206
StringRef getOwningModuleName(const Decl &D) {
198207
if (auto *OwningModule = D.getImportedOwningModule())
199208
return OwningModule->Name;
@@ -573,13 +582,6 @@ bool ExtractAPIVisitorBase<Derived>::VisitCXXRecordDecl(
573582
DeclarationFragments SubHeading =
574583
DeclarationFragmentsBuilder::getSubHeading(Decl);
575584

576-
APIRecord::RecordKind Kind;
577-
if (Decl->isUnion())
578-
Kind = APIRecord::RecordKind::RK_Union;
579-
else if (Decl->isStruct())
580-
Kind = APIRecord::RecordKind::RK_Struct;
581-
else
582-
Kind = APIRecord::RecordKind::RK_CXXClass;
583585
auto Access = DeclarationFragmentsBuilder::getAccessControl(Decl);
584586

585587
CXXClassRecord *Record;
@@ -594,12 +596,15 @@ bool ExtractAPIVisitorBase<Derived>::VisitCXXRecordDecl(
594596
AvailabilityInfo::createFromDecl(Decl), Comment, Declaration,
595597
SubHeading, Template(Decl->getDescribedClassTemplate()), Access,
596598
isInSystemHeader(Decl));
597-
} else
599+
} else {
598600
Record = API.createRecord<CXXClassRecord>(
599601
USR, Name, createHierarchyInformationForDecl(*Decl), Loc,
600602
AvailabilityInfo::createFromDecl(Decl), Comment, Declaration,
601-
SubHeading, Kind, Access, isInSystemHeader(Decl));
603+
SubHeading, APIRecord::RecordKind::RK_CXXClass, Access,
604+
isInSystemHeader(Decl));
605+
}
602606

607+
Record->KindForDisplay = getKindForDisplay(Decl);
603608
Record->Bases = getBases(Decl);
604609

605610
return true;
@@ -823,6 +828,7 @@ bool ExtractAPIVisitorBase<Derived>::
823828
Template(Decl), DeclarationFragmentsBuilder::getAccessControl(Decl),
824829
isInSystemHeader(Decl));
825830

831+
CTPSR->KindForDisplay = getKindForDisplay(Decl);
826832
CTPSR->Bases = getBases(Decl);
827833

828834
return true;

clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class SymbolGraphSerializer : public APISetVisitor<SymbolGraphSerializer> {
102102

103103
const bool EmitSymbolLabelsForTesting = false;
104104

105+
const bool SkipSymbolsInCategoriesToExternalTypes = false;
106+
105107
/// The object instantiated by the last call to serializeAPIRecord.
106108
Object *CurrentSymbol = nullptr;
107109

@@ -267,10 +269,13 @@ class SymbolGraphSerializer : public APISetVisitor<SymbolGraphSerializer> {
267269

268270
SymbolGraphSerializer(const APISet &API, const APIIgnoresList &IgnoresList,
269271
bool EmitSymbolLabelsForTesting = false,
270-
bool ForceEmitToMainModule = false)
272+
bool ForceEmitToMainModule = false,
273+
bool SkipSymbolsInCategoriesToExternalTypes = false)
271274
: Base(API), ForceEmitToMainModule(ForceEmitToMainModule),
272275
IgnoresList(IgnoresList),
273-
EmitSymbolLabelsForTesting(EmitSymbolLabelsForTesting) {}
276+
EmitSymbolLabelsForTesting(EmitSymbolLabelsForTesting),
277+
SkipSymbolsInCategoriesToExternalTypes(
278+
SkipSymbolsInCategoriesToExternalTypes) {}
274279
};
275280

276281
} // namespace extractapi

0 commit comments

Comments
 (0)