@@ -328,9 +328,9 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
328328 : IDEInspectionCallbacks(P), Consumer(Consumer),
329329 RequestedLoc (RequestedLoc) {}
330330
331- ResolvedCursorInfoPtr getDeclResult (NodeFinderDeclResult *DeclResult,
332- SourceFile *SrcFile,
333- NodeFinder &Finder) const {
331+ SmallVector< ResolvedCursorInfoPtr>
332+ getDeclResult (NodeFinderDeclResult *DeclResult, SourceFile *SrcFile,
333+ NodeFinder &Finder) const {
334334 typeCheckDeclAndParentClosures (DeclResult->getDecl ());
335335 return new ResolvedValueRefCursorInfo (
336336 SrcFile, RequestedLoc, DeclResult->getDecl (),
@@ -342,11 +342,12 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
342342 /* IsDynamic=*/ false ,
343343 /* ReceiverTypes=*/ {},
344344 Finder.getShorthandShadowedDecls (DeclResult->getDecl ()));
345+ return {CursorInfo};
345346 }
346347
347- ResolvedCursorInfoPtr getExprResult (NodeFinderExprResult *ExprResult,
348- SourceFile *SrcFile,
349- NodeFinder &Finder) const {
348+ SmallVector< ResolvedCursorInfoPtr>
349+ getExprResult (NodeFinderExprResult *ExprResult, SourceFile *SrcFile,
350+ NodeFinder &Finder) const {
350351 Expr *E = ExprResult->getExpr ();
351352 DeclContext *DC = ExprResult->getDeclContext ();
352353
@@ -359,7 +360,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
359360
360361 if (Callback.getResults ().empty ()) {
361362 // No results.
362- return nullptr ;
363+ return {} ;
363364 }
364365
365366 for (auto Info : Callback.getResults ()) {
@@ -368,34 +369,33 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
368369 typeCheckDeclAndParentClosures (Info.ReferencedDecl );
369370 }
370371
371- if (Callback.getResults ().size () != 1 ) {
372- // FIXME: We need to be able to report multiple results.
373- return nullptr ;
374- }
375-
376372 // Deliver results
377373
378- auto Res = Callback.getResults ()[0 ];
379- SmallVector<NominalTypeDecl *> ReceiverTypes;
380- if (Res.IsDynamicRef && Res.BaseType ) {
381- if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
382- ReceiverTypes = {ReceiverType};
383- } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
384- // Look through metatypes to get the nominal type decl.
385- if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
374+ SmallVector<ResolvedCursorInfoPtr> Results;
375+ for (auto Res : Callback.getResults ()) {
376+ SmallVector<NominalTypeDecl *> ReceiverTypes;
377+ if (Res.IsDynamicRef && Res.BaseType ) {
378+ if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
386379 ReceiverTypes = {ReceiverType};
380+ } else if (auto MT = Res.BaseType ->getAs <AnyMetatypeType>()) {
381+ // Look through metatypes to get the nominal type decl.
382+ if (auto ReceiverType = MT->getInstanceType ()->getAnyNominal ()) {
383+ ReceiverTypes = {ReceiverType};
384+ }
387385 }
388386 }
389- }
390387
391- return new ResolvedValueRefCursorInfo (
392- SrcFile, RequestedLoc, Res.ReferencedDecl ,
393- /* CtorTyRef=*/ nullptr ,
394- /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
395- /* ContainerType=*/ Res.BaseType ,
396- /* CustomAttrRef=*/ None,
397- /* IsKeywordArgument=*/ false , Res.IsDynamicRef , ReceiverTypes,
398- Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
388+ auto CursorInfo = new ResolvedValueRefCursorInfo (
389+ SrcFile, RequestedLoc, Res.ReferencedDecl ,
390+ /* CtorTyRef=*/ nullptr ,
391+ /* ExtTyRef=*/ nullptr , /* IsRef=*/ true , /* Ty=*/ Type (),
392+ /* ContainerType=*/ Res.BaseType ,
393+ /* CustomAttrRef=*/ None,
394+ /* IsKeywordArgument=*/ false , Res.IsDynamicRef , ReceiverTypes,
395+ Finder.getShorthandShadowedDecls (Res.ReferencedDecl ));
396+ Results.push_back (CursorInfo);
397+ }
398+ return Results;
399399 }
400400
401401 void doneParsing (SourceFile *SrcFile) override {
@@ -408,7 +408,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
408408 if (!Result) {
409409 return ;
410410 }
411- ResolvedCursorInfoPtr CursorInfo;
411+ SmallVector< ResolvedCursorInfoPtr> CursorInfo;
412412 switch (Result->getKind ()) {
413413 case NodeFinderResultKind::Decl:
414414 CursorInfo = getDeclResult (cast<NodeFinderDeclResult>(Result.get ()),
0 commit comments