[CodeComplete] Add type relation descriptor when completing return statement. rdar://22788321

Swift SVN r32125
This commit is contained in:
Xi Ge
2015-09-21 21:18:26 +00:00
parent c9f43c824c
commit dfc48c8aee
5 changed files with 47 additions and 0 deletions

View File

@@ -901,6 +901,7 @@ public:
bool HasReturn) override;
void completeAssignmentRHS(AssignExpr *E) override;
void completeCallArg(CallExpr *E) override;
void completeReturnStmt(CodeCompletionExpr *E) override;
void addKeywords(CodeCompletionResultSink &Sink);
void doneParsing() override;
@@ -3029,6 +3030,12 @@ void CodeCompletionCallbacksImpl::completeCallArg(CallExpr *E) {
}
}
void CodeCompletionCallbacksImpl::completeReturnStmt(CodeCompletionExpr *E) {
CurDeclContext = P.CurDeclContext;
CodeCompleteTokenExpr = E;
Kind = CompletionKind::ReturnStmtExpr;
}
void CodeCompletionCallbacksImpl::completeNominalMemberBeginning(
SmallVectorImpl<StringRef> &Keywords) {
assert(!InEnumElementRawValue);
@@ -3126,6 +3133,7 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink) {
case CompletionKind::UnresolvedMember:
case CompletionKind::AssignmentRHS:
case CompletionKind::CallArg:
case CompletionKind::ReturnStmtExpr:
break;
case CompletionKind::PostfixExprBeginning:
@@ -3450,6 +3458,16 @@ void CodeCompletionCallbacksImpl::doneParsing() {
DoPostfixExprBeginning();
break;
}
case CompletionKind::ReturnStmtExpr : {
SourceLoc Loc = P.Context.SourceMgr.getCodeCompletionLoc();
if (auto FD = dyn_cast<AbstractFunctionDecl>(CurDeclContext)) {
if (auto FT = FD->getType()->getAs<FunctionType>()) {
Lookup.setExpectedTypes(FT->getResult());
}
}
Lookup.getValueCompletionsInDeclContext(Loc);
}
}
if (Lookup.RequestedCachedResults) {