@@ -216,7 +216,9 @@ class NodeFinder : ASTWalker {
216216 if (auto CaptureList = dyn_cast<CaptureListExpr>(E)) {
217217 for (auto ShorthandShadows :
218218 getShorthandShadows (CaptureList, getCurrentDeclContext ())) {
219- assert (ShorthandShadowedDecls.count (ShorthandShadows.first ) == 0 );
219+ assert (ShorthandShadowedDecls.count (ShorthandShadows.first ) == 0 ||
220+ ShorthandShadowedDecls[ShorthandShadows.first ] ==
221+ ShorthandShadows.second );
220222 ShorthandShadowedDecls[ShorthandShadows.first ] =
221223 ShorthandShadows.second ;
222224 }
@@ -346,7 +348,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
346348 : IDEInspectionCallbacks(P), Consumer(Consumer),
347349 RequestedLoc (RequestedLoc) {}
348350
349- SmallVector <ResolvedCursorInfoPtr>
351+ std::vector <ResolvedCursorInfoPtr>
350352 getDeclResult (NodeFinderDeclResult *DeclResult, SourceFile *SrcFile,
351353 NodeFinder &Finder) const {
352354 typeCheckDeclAndParentClosures (DeclResult->getDecl ());
@@ -363,18 +365,20 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
363365 return {CursorInfo};
364366 }
365367
366- SmallVector <ResolvedCursorInfoPtr>
368+ std::vector <ResolvedCursorInfoPtr>
367369 getExprResult (NodeFinderExprResult *ExprResult, SourceFile *SrcFile,
368370 NodeFinder &Finder) const {
369371 Expr *E = ExprResult->getExpr ();
370372 DeclContext *DC = ExprResult->getDeclContext ();
371373
372374 // Type check the statemnt containing E and listen for solutions.
373375 CursorInfoTypeCheckSolutionCallback Callback (*DC, RequestedLoc);
374- llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
375- DC->getASTContext ().SolutionCallback , &Callback);
376- typeCheckASTNodeAtLoc (TypeCheckASTNodeAtLocContext::declContext (DC),
377- E->getLoc ());
376+ {
377+ llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
378+ DC->getASTContext ().SolutionCallback , &Callback);
379+ typeCheckASTNodeAtLoc (TypeCheckASTNodeAtLocContext::declContext (DC),
380+ E->getLoc ());
381+ }
378382
379383 if (Callback.getResults ().empty ()) {
380384 // No results.
@@ -389,9 +393,14 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
389393
390394 // Deliver results
391395
392- SmallVector <ResolvedCursorInfoPtr> Results;
396+ std::vector <ResolvedCursorInfoPtr> Results;
393397 for (auto Res : Callback.getResults ()) {
394398 SmallVector<NominalTypeDecl *> ReceiverTypes;
399+ if (isa<ModuleDecl>(Res.ReferencedDecl )) {
400+ // ResolvedModuleRefCursorInfo is not supported by solver-based cursor
401+ // info yet.
402+ continue ;
403+ }
395404 if (Res.IsDynamicRef && Res.BaseType ) {
396405 if (auto ReceiverType = Res.BaseType ->getAnyNominal ()) {
397406 ReceiverTypes = {ReceiverType};
@@ -426,7 +435,7 @@ class CursorInfoDoneParsingCallback : public IDEInspectionCallbacks {
426435 if (!Result) {
427436 return ;
428437 }
429- SmallVector <ResolvedCursorInfoPtr> CursorInfo;
438+ std::vector <ResolvedCursorInfoPtr> CursorInfo;
430439 switch (Result->getKind ()) {
431440 case NodeFinderResultKind::Decl:
432441 CursorInfo = getDeclResult (cast<NodeFinderDeclResult>(Result.get ()),
0 commit comments