diff options
Diffstat (limited to 'lib/Sema/SemaCodeComplete.cpp')
-rw-r--r-- | lib/Sema/SemaCodeComplete.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 9f92641f0d..b828a02255 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -893,6 +893,7 @@ static void AddFunctionSpecifiers(Action::CodeCompletionContext CCC, Results.MaybeAddResult(Result("inline", Rank)); break; + case Action::CCC_ObjCInstanceVariableList: case Action::CCC_Expression: case Action::CCC_Statement: case Action::CCC_ForInit: @@ -905,6 +906,10 @@ static void AddObjCExpressionResults(unsigned Rank, ResultBuilder &Results, bool NeedAt); static void AddObjCStatementResults(unsigned Rank, ResultBuilder &Results, bool NeedAt); +static void AddObjCVisibilityResults(unsigned Rank, + const LangOptions &LangOpts, + ResultBuilder &Results, + bool NeedAt); static void AddObjCImplementationResults(unsigned Rank, const LangOptions &LangOpts, ResultBuilder &Results, @@ -1053,6 +1058,10 @@ static void AddOrdinaryNameResults(Action::CodeCompletionContext CCC, AddFunctionSpecifiers(CCC, SemaRef.getLangOptions(), Rank, Results); break; + case Action::CCC_ObjCInstanceVariableList: + AddObjCVisibilityResults(Rank, SemaRef.getLangOptions(), Results, true); + break; + case Action::CCC_Statement: { Results.MaybeAddResult(Result("typedef", Rank)); @@ -1971,6 +1980,7 @@ void Sema::CodeCompleteOrdinaryName(Scope *S, case CCC_Class: case CCC_ObjCInterface: case CCC_ObjCImplementation: + case CCC_ObjCInstanceVariableList: case CCC_Template: case CCC_MemberTemplate: Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName); @@ -2672,8 +2682,27 @@ static void AddObjCStatementResults(unsigned Rank, ResultBuilder &Results, Results.MaybeAddResult(Result(Pattern, 0)); } -void Sema::CodeCompleteObjCAtStatement(Scope *S) { +static void AddObjCVisibilityResults(unsigned Rank, + const LangOptions &LangOpts, + ResultBuilder &Results, + bool NeedAt) { typedef CodeCompleteConsumer::Result Result; + Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,private), Rank)); + Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,protected), Rank)); + Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,public), Rank)); + if (LangOpts.ObjC2) + Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,package), Rank)); +} + +void Sema::CodeCompleteObjCAtVisibility(Scope *S) { + ResultBuilder Results(*this); + Results.EnterNewScope(); + AddObjCVisibilityResults(0, getLangOptions(), Results, false); + Results.ExitScope(); + HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size()); +} + +void Sema::CodeCompleteObjCAtStatement(Scope *S) { ResultBuilder Results(*this); Results.EnterNewScope(); AddObjCStatementResults(0, Results, false); |