|
11 | 11 | #include "clang/AST/PrettyPrinter.h" |
12 | 12 | #include "clang/AST/RecursiveASTVisitor.h" |
13 | 13 | #include "clang/AST/TypeLoc.h" |
| 14 | +#include "clang/Sema/HeuristicResolver.h" |
14 | 15 | #include "llvm/ADT/ScopeExit.h" |
15 | 16 |
|
16 | 17 | using namespace clang; |
@@ -207,27 +208,8 @@ class TypeIndexer : public RecursiveASTVisitor<TypeIndexer> { |
207 | 208 | } |
208 | 209 |
|
209 | 210 | bool VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { |
210 | | - const DependentNameType *DNT = TL.getTypePtr(); |
211 | | - const NestedNameSpecifier *NNS = DNT->getQualifier(); |
212 | | - const Type *T = NNS->getAsType(); |
213 | | - if (!T) |
214 | | - return true; |
215 | | - const TemplateSpecializationType *TST = |
216 | | - T->getAs<TemplateSpecializationType>(); |
217 | | - if (!TST) |
218 | | - return true; |
219 | | - TemplateName TN = TST->getTemplateName(); |
220 | | - const ClassTemplateDecl *TD = |
221 | | - dyn_cast_or_null<ClassTemplateDecl>(TN.getAsTemplateDecl()); |
222 | | - if (!TD) |
223 | | - return true; |
224 | | - CXXRecordDecl *RD = TD->getTemplatedDecl(); |
225 | | - if (!RD->hasDefinition()) |
226 | | - return true; |
227 | | - RD = RD->getDefinition(); |
228 | | - DeclarationName Name(DNT->getIdentifier()); |
229 | | - std::vector<const NamedDecl *> Symbols = RD->lookupDependentName( |
230 | | - Name, [](const NamedDecl *ND) { return isa<TypeDecl>(ND); }); |
| 211 | + std::vector<const NamedDecl *> Symbols = |
| 212 | + IndexCtx.getResolver()->resolveDependentNameType(TL.getTypePtr()); |
231 | 213 | if (Symbols.size() != 1) |
232 | 214 | return true; |
233 | 215 | return IndexCtx.handleReference(Symbols[0], TL.getNameLoc(), Parent, |
|
0 commit comments