@@ -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
ResolvedValueRefCursorInfoPtr CursorInfo = new ResolvedValueRefCursorInfo (
329
329
new ResolvedCursorInfo (SrcFile), DeclResult->getDecl (),
@@ -333,12 +333,12 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
333
333
CursorInfo->setLoc (RequestedLoc);
334
334
CursorInfo->setShorthandShadowedDecls (
335
335
Finder.getShorthandShadowedDecls (DeclResult->getDecl ()));
336
- return CursorInfo;
336
+ return { CursorInfo} ;
337
337
}
338
338
339
- ResolvedCursorInfoPtr getExprResult (NodeFinderExprResult *ExprResult,
340
- SourceFile *SrcFile,
341
- NodeFinder &Finder) const {
339
+ SmallVector< ResolvedCursorInfoPtr>
340
+ getExprResult (NodeFinderExprResult *ExprResult, SourceFile *SrcFile,
341
+ NodeFinder &Finder) const {
342
342
Expr *E = ExprResult->getExpr ();
343
343
DeclContext *DC = ExprResult->getDeclContext ();
344
344
@@ -351,7 +351,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
351
351
352
352
if (Callback.getResults ().empty ()) {
353
353
// No results.
354
- return nullptr ;
354
+ return {} ;
355
355
}
356
356
357
357
for (auto Info : Callback.getResults ()) {
@@ -360,34 +360,32 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
360
360
typeCheckDeclAndParentClosures (Info.ReferencedDecl );
361
361
}
362
362
363
- if (Callback.getResults ().size () != 1 ) {
364
- // FIXME: We need to be able to report multiple results.
365
- return nullptr ;
366
- }
367
-
368
363
// Deliver results
369
364
370
- auto Res = Callback.getResults ()[0 ];
371
- ResolvedValueRefCursorInfoPtr CursorInfo = new ResolvedValueRefCursorInfo (
372
- new ResolvedCursorInfo (SrcFile), Res.ReferencedDecl ,
373
- /* CtorTyRef=*/ nullptr ,
374
- /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
375
- /* ContainerType=*/ Res.BaseType );
376
- CursorInfo->setLoc (RequestedLoc);
377
- CursorInfo->setIsDynamic (Res.IsDynamicRef );
378
- if (Res.IsDynamicRef && Res.BaseType ) {
379
- if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
380
- CursorInfo->setReceiverTypes ({ReceiverType});
381
- } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
382
- // Look through metatypes to get the nominal type decl.
383
- if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
365
+ SmallVector<ResolvedCursorInfoPtr> Results;
366
+ for (auto Res : Callback.getResults ()) {
367
+ ResolvedValueRefCursorInfoPtr CursorInfo = new ResolvedValueRefCursorInfo (
368
+ new ResolvedCursorInfo (SrcFile), Res.ReferencedDecl ,
369
+ /* CtorTyRef=*/ nullptr ,
370
+ /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
371
+ /* ContainerType=*/ Res.BaseType );
372
+ CursorInfo->setLoc (RequestedLoc);
373
+ CursorInfo->setIsDynamic (Res.IsDynamicRef );
374
+ if (Res.IsDynamicRef && Res.BaseType ) {
375
+ if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
384
376
CursorInfo->setReceiverTypes ({ReceiverType});
377
+ } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
378
+ // Look through metatypes to get the nominal type decl.
379
+ if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
380
+ CursorInfo->setReceiverTypes ({ReceiverType});
381
+ }
385
382
}
386
383
}
384
+ CursorInfo->setShorthandShadowedDecls (
385
+ Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
386
+ Results.push_back (CursorInfo);
387
387
}
388
- CursorInfo->setShorthandShadowedDecls (
389
- Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
390
- return CursorInfo;
388
+ return Results;
391
389
}
392
390
393
391
void doneParsing (SourceFile *SrcFile) override {
@@ -400,7 +398,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
400
398
if (!Result) {
401
399
return ;
402
400
}
403
- ResolvedCursorInfoPtr CursorInfo;
401
+ SmallVector< ResolvedCursorInfoPtr> CursorInfo;
404
402
switch (Result->getKind ()) {
405
403
case NodeFinderResultKind::Decl:
406
404
CursorInfo = getDeclResult (cast<NodeFinderDeclResult>(Result.get ()),
0 commit comments