@@ -1397,20 +1397,31 @@ bool CodeCompletionCallbacksImpl::trySolverCompletion(bool MaybeFuncBody) {
13971397 CurDeclContext, CompletionContext, Consumer);
13981398 return true ;
13991399 }
1400- case CompletionKind::StmtOrExpr :
1400+ case CompletionKind::AccessorBeginning :
14011401 case CompletionKind::ForEachSequence:
1402- case CompletionKind::PostfixExprBeginning: {
1403- assert (CodeCompleteTokenExpr);
1402+ case CompletionKind::PostfixExprBeginning:
1403+ case CompletionKind::StmtOrExpr: {
14041404 assert (CurDeclContext);
14051405
14061406 ExprTypeCheckCompletionCallback Lookup (CodeCompleteTokenExpr,
14071407 CurDeclContext);
1408- llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
1409- Context.CompletionCallback , &Lookup);
1410- typeCheckContextAt (CurDeclContext, CompletionLoc);
1411-
1412- if (!Lookup.gotCallback ()) {
1413- Lookup.fallbackTypeCheck (CurDeclContext);
1408+ if (CodeCompleteTokenExpr) {
1409+ // 'CodeCompletionTokenExpr == nullptr' happens when completing e.g.
1410+ // var x: Int {
1411+ // get { ... }
1412+ // #^COMPLETE^#
1413+ // }
1414+ // In this case we don't want to provide any expression results. We still
1415+ // need to have a TypeCheckCompletionCallback so we can call
1416+ // deliverResults on it to deliver the keyword results from the completion
1417+ // context's result sink to the consumer.
1418+ llvm::SaveAndRestore<TypeCheckCompletionCallback *> CompletionCollector (
1419+ Context.CompletionCallback , &Lookup);
1420+ typeCheckContextAt (CurDeclContext, CompletionLoc);
1421+
1422+ if (!Lookup.gotCallback ()) {
1423+ Lookup.fallbackTypeCheck (CurDeclContext);
1424+ }
14141425 }
14151426
14161427 addKeywords (CompletionContext.getResultSink (), MaybeFuncBody);
@@ -1564,6 +1575,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
15641575 case CompletionKind::ForEachSequence:
15651576 case CompletionKind::PostfixExprBeginning:
15661577 case CompletionKind::AfterPoundExpr:
1578+ case CompletionKind::AccessorBeginning:
15671579 llvm_unreachable (" should be already handled" );
15681580 return ;
15691581
@@ -1680,16 +1692,6 @@ void CodeCompletionCallbacksImpl::doneParsing() {
16801692 break ;
16811693 }
16821694
1683- case CompletionKind::AccessorBeginning: {
1684- if (isa<AccessorDecl>(ParsedDecl)) {
1685- ExprContextInfo ContextInfo (CurDeclContext, CodeCompleteTokenExpr);
1686- Lookup.setExpectedTypes (ContextInfo.getPossibleTypes (),
1687- ContextInfo.isImplicitSingleExpressionReturn ());
1688- DoPostfixExprBeginning ();
1689- }
1690- break ;
1691- }
1692-
16931695 case CompletionKind::AttributeBegin: {
16941696 Lookup.getAttributeDeclCompletions (IsInSil, AttTargetDK);
16951697
0 commit comments