diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:11 +0000 |
commit | e3b557809604d036af6e00c60f012c2025b59a5e (patch) | |
tree | 8a11ba2269a3b669601e2fd41145b174008f4da8 /clang/lib/ExtractAPI/DeclarationFragments.cpp | |
parent | 08e8dd7b9db7bb4a9de26d44c1cbfd24e869c014 (diff) |
Diffstat (limited to 'clang/lib/ExtractAPI/DeclarationFragments.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/DeclarationFragments.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp index 75d360a3ba16..12c91c582aa9 100644 --- a/clang/lib/ExtractAPI/DeclarationFragments.cpp +++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp @@ -109,7 +109,7 @@ DeclarationFragmentsBuilder::getFragmentsForNNS(const NestedNameSpecifier *NNS, SmallString<128> USR; index::generateUSRForDecl(NS, USR); Fragments.append(NS->getName(), - DeclarationFragments::FragmentKind::Identifier, USR); + DeclarationFragments::FragmentKind::Identifier, USR, NS); break; } @@ -118,7 +118,8 @@ DeclarationFragmentsBuilder::getFragmentsForNNS(const NestedNameSpecifier *NNS, SmallString<128> USR; index::generateUSRForDecl(Alias, USR); Fragments.append(Alias->getName(), - DeclarationFragments::FragmentKind::Identifier, USR); + DeclarationFragments::FragmentKind::Identifier, USR, + Alias); break; } @@ -136,7 +137,7 @@ DeclarationFragmentsBuilder::getFragmentsForNNS(const NestedNameSpecifier *NNS, Fragments.append("template", DeclarationFragments::FragmentKind::Keyword); Fragments.appendSpace(); // Fallthrough after adding the keyword to handle the actual type. - LLVM_FALLTHROUGH; + [[fallthrough]]; case NestedNameSpecifier::TypeSpec: { const Type *T = NNS->getAsType(); @@ -255,11 +256,11 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType( // direct reference to the typedef instead of the wrapped type. if (const TypedefType *TypedefTy = dyn_cast<TypedefType>(T)) { const TypedefNameDecl *Decl = TypedefTy->getDecl(); - std::string USR = - TypedefUnderlyingTypeResolver(Context).getUSRForType(QualType(T, 0)); - return Fragments.append(Decl->getName(), - DeclarationFragments::FragmentKind::TypeIdentifier, - USR); + TypedefUnderlyingTypeResolver TypedefResolver(Context); + std::string USR = TypedefResolver.getUSRForType(QualType(T, 0)); + return Fragments.append( + Decl->getName(), DeclarationFragments::FragmentKind::TypeIdentifier, + USR, TypedefResolver.getUnderlyingTypeDecl(QualType(T, 0))); } // If the base type is a TagType (struct/interface/union/class/enum), let's @@ -273,7 +274,7 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType( clang::index::generateUSRForDecl(Decl, TagUSR); return Fragments.append(Decl->getName(), DeclarationFragments::FragmentKind::TypeIdentifier, - TagUSR); + TagUSR, Decl); } // If the base type is an ObjCInterfaceType, use the underlying @@ -284,7 +285,7 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType( index::generateUSRForDecl(Decl, USR); return Fragments.append(Decl->getName(), DeclarationFragments::FragmentKind::TypeIdentifier, - USR); + USR, Decl); } // Default fragment builder for other kinds of types (BuiltinType etc.) @@ -530,13 +531,15 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCCategory( const ObjCCategoryDecl *Category) { DeclarationFragments Fragments; + auto *Interface = Category->getClassInterface(); SmallString<128> InterfaceUSR; - index::generateUSRForDecl(Category->getClassInterface(), InterfaceUSR); + index::generateUSRForDecl(Interface, InterfaceUSR); Fragments.append("@interface", DeclarationFragments::FragmentKind::Keyword) .appendSpace() .append(Category->getClassInterface()->getName(), - DeclarationFragments::FragmentKind::TypeIdentifier, InterfaceUSR) + DeclarationFragments::FragmentKind::TypeIdentifier, InterfaceUSR, + Interface) .append(" (", DeclarationFragments::FragmentKind::Text) .append(Category->getName(), DeclarationFragments::FragmentKind::Identifier) @@ -560,7 +563,8 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCInterface( index::generateUSRForDecl(SuperClass, SuperUSR); Fragments.append(" : ", DeclarationFragments::FragmentKind::Text) .append(SuperClass->getName(), - DeclarationFragments::FragmentKind::TypeIdentifier, SuperUSR); + DeclarationFragments::FragmentKind::TypeIdentifier, SuperUSR, + SuperClass); } return Fragments; @@ -692,6 +696,7 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCProperty( return Fragments.appendSpace() .append(getFragmentsForType(Property->getType(), Property->getASTContext(), After)) + .appendSpace() .append(Property->getName(), DeclarationFragments::FragmentKind::Identifier) .append(std::move(After)); @@ -718,7 +723,8 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForObjCProtocol( SmallString<128> USR; index::generateUSRForDecl(*It, USR); Fragments.append((*It)->getName(), - DeclarationFragments::FragmentKind::TypeIdentifier, USR); + DeclarationFragments::FragmentKind::TypeIdentifier, USR, + *It); } Fragments.append(">", DeclarationFragments::FragmentKind::Text); } |