@@ -328,9 +328,9 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
328
328
: IDEInspectionCallbacks(P), Consumer(Consumer),
329
329
RequestedLoc (RequestedLoc) {}
330
330
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 {
334
334
typeCheckDeclAndParentClosures (DeclResult->getDecl ());
335
335
return new ResolvedValueRefCursorInfo (
336
336
SrcFile, RequestedLoc, DeclResult->getDecl (),
@@ -342,11 +342,12 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
342
342
/* IsDynamic=*/ false ,
343
343
/* ReceiverTypes=*/ {},
344
344
Finder.getShorthandShadowedDecls (DeclResult->getDecl ()));
345
+ return {CursorInfo};
345
346
}
346
347
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 {
350
351
Expr *E = ExprResult->getExpr ();
351
352
DeclContext *DC = ExprResult->getDeclContext ();
352
353
@@ -359,7 +360,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
359
360
360
361
if (Callback.getResults ().empty ()) {
361
362
// No results.
362
- return nullptr ;
363
+ return {} ;
363
364
}
364
365
365
366
for (auto Info : Callback.getResults ()) {
@@ -368,34 +369,33 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
368
369
typeCheckDeclAndParentClosures (Info.ReferencedDecl );
369
370
}
370
371
371
- if (Callback.getResults ().size () != 1 ) {
372
- // FIXME: We need to be able to report multiple results.
373
- return nullptr ;
374
- }
375
-
376
372
// Deliver results
377
373
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 ()) {
386
379
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
+ }
387
385
}
388
386
}
389
- }
390
387
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;
399
399
}
400
400
401
401
void doneParsing (SourceFile *SrcFile) override {
@@ -408,7 +408,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
408
408
if (!Result) {
409
409
return ;
410
410
}
411
- ResolvedCursorInfoPtr CursorInfo;
411
+ SmallVector< ResolvedCursorInfoPtr> CursorInfo;
412
412
switch (Result->getKind ()) {
413
413
case NodeFinderResultKind::Decl:
414
414
CursorInfo = getDeclResult (cast<NodeFinderDeclResult>(Result.get ()),
0 commit comments