@@ -321,9 +321,9 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
321
321
: IDEInspectionCallbacks(P), Consumer(Consumer),
322
322
RequestedLoc (RequestedLoc) {}
323
323
324
- ResolvedCursorInfoPtr getDeclResult (NodeFinderDeclResult *DeclResult,
325
- SourceFile *SrcFile,
326
- NodeFinder &Finder) const {
324
+ SmallVector< ResolvedCursorInfoPtr>
325
+ getDeclResult (NodeFinderDeclResult *DeclResult, SourceFile *SrcFile,
326
+ NodeFinder &Finder) const {
327
327
typeCheckDeclAndParentClosures (DeclResult->getDecl ());
328
328
return new ResolvedValueRefCursorInfo (
329
329
SrcFile, RequestedLoc, DeclResult->getDecl (),
@@ -335,11 +335,12 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
335
335
/* IsDynamic=*/ false ,
336
336
/* ReceiverTypes=*/ {},
337
337
Finder.getShorthandShadowedDecls (DeclResult->getDecl ()));
338
+ return {CursorInfo};
338
339
}
339
340
340
- ResolvedCursorInfoPtr getExprResult (NodeFinderExprResult *ExprResult,
341
- SourceFile *SrcFile,
342
- NodeFinder &Finder) const {
341
+ SmallVector< ResolvedCursorInfoPtr>
342
+ getExprResult (NodeFinderExprResult *ExprResult, SourceFile *SrcFile,
343
+ NodeFinder &Finder) const {
343
344
Expr *E = ExprResult->getExpr ();
344
345
DeclContext *DC = ExprResult->getDeclContext ();
345
346
@@ -352,7 +353,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
352
353
353
354
if (Callback.getResults ().empty ()) {
354
355
// No results.
355
- return nullptr ;
356
+ return {} ;
356
357
}
357
358
358
359
for (auto Info : Callback.getResults ()) {
@@ -361,34 +362,33 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
361
362
typeCheckDeclAndParentClosures (Info.ReferencedDecl );
362
363
}
363
364
364
- if (Callback.getResults ().size () != 1 ) {
365
- // FIXME: We need to be able to report multiple results.
366
- return nullptr ;
367
- }
368
-
369
365
// Deliver results
370
366
371
- auto Res = Callback.getResults ()[0 ];
372
- SmallVector<NominalTypeDecl *> ReceiverTypes;
373
- if (Res.IsDynamicRef && Res.BaseType ) {
374
- if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
375
- ReceiverTypes = {ReceiverType};
376
- } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
377
- // Look through metatypes to get the nominal type decl.
378
- if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
367
+ SmallVector<ResolvedCursorInfoPtr> Results;
368
+ for (auto Res : Callback.getResults ()) {
369
+ SmallVector<NominalTypeDecl *> ReceiverTypes;
370
+ if (Res.IsDynamicRef && Res.BaseType ) {
371
+ if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
379
372
ReceiverTypes = {ReceiverType};
373
+ } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
374
+ // Look through metatypes to get the nominal type decl.
375
+ if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
376
+ ReceiverTypes = {ReceiverType};
377
+ }
380
378
}
381
379
}
382
- }
383
380
384
- return new ResolvedValueRefCursorInfo (
385
- SrcFile, RequestedLoc, Res.ReferencedDecl ,
386
- /* CtorTyRef=*/ nullptr ,
387
- /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
388
- /* ContainerType=*/ Res.BaseType ,
389
- /* CustomAttrRef=*/ None,
390
- /* IsKeywordArgument=*/ false , Res.IsDynamicRef , ReceiverTypes,
391
- Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
381
+ auto CursorInfo = new ResolvedValueRefCursorInfo (
382
+ SrcFile, RequestedLoc, Res.ReferencedDecl ,
383
+ /* CtorTyRef=*/ nullptr ,
384
+ /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
385
+ /* ContainerType=*/ Res.BaseType ,
386
+ /* CustomAttrRef=*/ None,
387
+ /* IsKeywordArgument=*/ false , Res.IsDynamicRef , ReceiverTypes,
388
+ Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
389
+ Results.push_back (CursorInfo);
390
+ }
391
+ return Results;
392
392
}
393
393
394
394
void doneParsing (SourceFile *SrcFile) override {
@@ -401,7 +401,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
401
401
if (!Result) {
402
402
return ;
403
403
}
404
- ResolvedCursorInfoPtr CursorInfo;
404
+ SmallVector< ResolvedCursorInfoPtr> CursorInfo;
405
405
switch (Result->getKind ()) {
406
406
case NodeFinderResultKind::Decl:
407
407
CursorInfo = getDeclResult (cast<NodeFinderDeclResult>(Result.get ()),
0 commit comments