diff options
author | Zixu Wang <zixu_wang@apple.com> | 2022-04-06 14:53:52 -0700 |
---|---|---|
committer | Zixu Wang <zixu_wang@apple.com> | 2022-04-07 10:22:41 -0700 |
commit | 4048aad85a843d2b15cb8e60b2ea37f148b7b770 (patch) | |
tree | 1c856898f2697d30e5ac068c6b8ccfb5ae69ada6 /clang/lib/ExtractAPI/DeclarationFragments.cpp | |
parent | 17fdaccccfad9b143e4aadbcdda7f645de127153 (diff) | |
download | llvm-4048aad85a843d2b15cb8e60b2ea37f148b7b770.zip llvm-4048aad85a843d2b15cb8e60b2ea37f148b7b770.tar.gz llvm-4048aad85a843d2b15cb8e60b2ea37f148b7b770.tar.bz2 |
[clang][ExtractAPI] Fix declaration fragments for ObjC methods
Objective-C methods selector parts should be considered as identifiers.
Depends on D123259
Differential Revision: https://reviews.llvm.org/D123261
Diffstat (limited to 'clang/lib/ExtractAPI/DeclarationFragments.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/DeclarationFragments.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp index a569ff9..75d360a 100644 --- a/clang/lib/ExtractAPI/DeclarationFragments.cpp +++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp @@ -593,20 +593,21 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCMethod( // For Objective-C methods that take arguments, build the selector slots. for (unsigned i = 0, end = Method->param_size(); i != end; ++i) { - Fragments.appendSpace() - .append(Selector.getNameForSlot(i), - // The first slot is the name of the method, record as an - // identifier, otherwise as exteranl parameters. - i == 0 ? DeclarationFragments::FragmentKind::Identifier - : DeclarationFragments::FragmentKind::ExternalParam) - .append(":", DeclarationFragments::FragmentKind::Text); + // Objective-C method selector parts are considered as identifiers instead + // of "external parameters" as in Swift. This is because Objective-C method + // symbols are referenced with the entire selector, instead of just the + // method name in Swift. + SmallString<32> ParamID(Selector.getNameForSlot(i)); + ParamID.append(":"); + Fragments.appendSpace().append( + ParamID, DeclarationFragments::FragmentKind::Identifier); // Build the internal parameter. const ParmVarDecl *Param = Method->getParamDecl(i); Fragments.append(getFragmentsForParam(Param)); } - return Fragments; + return Fragments.append(";", DeclarationFragments::FragmentKind::Text); } DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCProperty( |