aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/DeclarationFragments.cpp
diff options
context:
space:
mode:
authorZixu Wang <zixu_wang@apple.com>2022-04-06 14:53:52 -0700
committerZixu Wang <zixu_wang@apple.com>2022-04-07 10:22:41 -0700
commit4048aad85a843d2b15cb8e60b2ea37f148b7b770 (patch)
tree1c856898f2697d30e5ac068c6b8ccfb5ae69ada6 /clang/lib/ExtractAPI/DeclarationFragments.cpp
parent17fdaccccfad9b143e4aadbcdda7f645de127153 (diff)
downloadllvm-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.cpp17
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(