diff options
author | Zixu Wang <zixu_wang@apple.com> | 2022-03-30 17:21:33 -0700 |
---|---|---|
committer | Zixu Wang <zixu_wang@apple.com> | 2022-04-06 12:00:12 -0700 |
commit | 178aad9b946e3c5abe9df162e5c482fb4acae99c (patch) | |
tree | 7791542c16161e68d1b9b27d7eb9251faabdaa7f /clang/lib/ExtractAPI/DeclarationFragments.cpp | |
parent | 6b306233f78876a1d197ed6e1f05785505de7c63 (diff) | |
download | llvm-178aad9b946e3c5abe9df162e5c482fb4acae99c.zip llvm-178aad9b946e3c5abe9df162e5c482fb4acae99c.tar.gz llvm-178aad9b946e3c5abe9df162e5c482fb4acae99c.tar.bz2 |
[clang][extract-api] Add Objective-C Category support
Add (partial) support for Objective-C category records in ExtractAPI.
The current ExtractAPI collects everything for an Objective-C category,
but not fully serialized in the SymbolGraphSerializer. Categories
extending external interfaces are disgarded during serialization, and
categories extending known interfaces are merged (all members surfaced)
into the interfaces.
Differential Revision: https://reviews.llvm.org/D122774
Diffstat (limited to 'clang/lib/ExtractAPI/DeclarationFragments.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/DeclarationFragments.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp index 4e0e8da..fa28fad 100644 --- a/clang/lib/ExtractAPI/DeclarationFragments.cpp +++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp @@ -526,6 +526,25 @@ DeclarationFragmentsBuilder::getFragmentsForMacro(StringRef Name, return Fragments; } +DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCCategory( + const ObjCCategoryDecl *Category) { + DeclarationFragments Fragments; + + SmallString<128> InterfaceUSR; + index::generateUSRForDecl(Category->getClassInterface(), InterfaceUSR); + + Fragments.append("@interface", DeclarationFragments::FragmentKind::Keyword) + .appendSpace() + .append(Category->getClassInterface()->getName(), + DeclarationFragments::FragmentKind::TypeIdentifier, InterfaceUSR) + .append(" (", DeclarationFragments::FragmentKind::Text) + .append(Category->getName(), + DeclarationFragments::FragmentKind::Identifier) + .append(")", DeclarationFragments::FragmentKind::Text); + + return Fragments; +} + DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCInterface( const ObjCInterfaceDecl *Interface) { DeclarationFragments Fragments; |