@@ -1404,20 +1404,31 @@ bool CodeCompletionCallbacksImpl::trySolverCompletion(bool MaybeFuncBody) {
14041404 CurDeclContext, CompletionContext, Consumer);
14051405 return true ;
14061406 }
1407- case CompletionKind::StmtOrExpr :
1407+ case CompletionKind::AccessorBeginning :
14081408 case CompletionKind::ForEachSequence:
1409- case CompletionKind::PostfixExprBeginning: {
1410- assert (CodeCompleteTokenExpr);
1409+ case CompletionKind::PostfixExprBeginning:
1410+ case CompletionKind::StmtOrExpr: {
14111411 assert (CurDeclContext);
14121412
14131413 ExprTypeCheckCompletionCallback Lookup (CodeCompleteTokenExpr,
14141414 CurDeclContext);
1415- llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
1416- Context.CompletionCallback , &Lookup);
1417- typeCheckContextAt (CurDeclContext, CompletionLoc);
1418-
1419- if (!Lookup.gotCallback ()) {
1420- Lookup.fallbackTypeCheck (CurDeclContext);
1415+ if (CodeCompleteTokenExpr) {
1416+ // 'CodeCompletionTokenExpr == nullptr' happens when completing e.g.
1417+ // var x: Int {
1418+ // get { ... }
1419+ // #^COMPLETE^#
1420+ // }
1421+ // In this case we don't want to provide any expression results. We still
1422+ // need to have a TypeCheckCompletionCallback so we can call
1423+ // deliverResults on it to deliver the keyword results from the completion
1424+ // context's result sink to the consumer.
1425+ llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
1426+ Context.CompletionCallback , &Lookup);
1427+ typeCheckContextAt (CurDeclContext, CompletionLoc);
1428+
1429+ if (!Lookup.gotCallback ()) {
1430+ Lookup.fallbackTypeCheck (CurDeclContext);
1431+ }
14211432 }
14221433
14231434 addKeywords (CompletionContext.getResultSink (), MaybeFuncBody);
@@ -1571,6 +1582,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
15711582 case CompletionKind::ForEachSequence:
15721583 case CompletionKind::PostfixExprBeginning:
15731584 case CompletionKind::AfterPoundExpr:
1585+ case CompletionKind::AccessorBeginning:
15741586 llvm_unreachable (" should be already handled" );
15751587 return ;
15761588
@@ -1687,16 +1699,6 @@ void CodeCompletionCallbacksImpl::doneParsing() {
16871699 break ;
16881700 }
16891701
1690- case CompletionKind::AccessorBeginning: {
1691- if (isa<AccessorDecl>(ParsedDecl)) {
1692- ExprContextInfo ContextInfo (CurDeclContext, CodeCompleteTokenExpr);
1693- Lookup.setExpectedTypes (ContextInfo.getPossibleTypes (),
1694- ContextInfo.isImplicitSingleExpressionReturn ());
1695- DoPostfixExprBeginning ();
1696- }
1697- break ;
1698- }
1699-
17001702 case CompletionKind::AttributeBegin: {
17011703 Lookup.getAttributeDeclCompletions (IsInSil, AttTargetDK);
17021704
0 commit comments