|
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