diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-01-13 21:54:15 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-01-13 21:54:15 +0000 |
| commit | 48d462573d8f0099ce48dcd5793ac04930a8426d (patch) | |
| tree | 6a07ada29d91e5f172c60f5004b90fca8ecf2e0d /clang/lib/Sema | |
| parent | fb40a8e5f10a26a6c852e74c4b07e5e1c8b7bf36 (diff) | |
| download | bcm5719-llvm-48d462573d8f0099ce48dcd5793ac04930a8426d.tar.gz bcm5719-llvm-48d462573d8f0099ce48dcd5793ac04930a8426d.zip | |
Code-completion for @public, @protected, @private, @package.
llvm-svn: 93361
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/Sema.h | 1 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 31 |
2 files changed, 31 insertions, 1 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 956776cf29e..8fc34880c11 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -3851,6 +3851,7 @@ public: virtual void CodeCompleteObjCAtDirective(Scope *S, DeclPtrTy ObjCImpDecl, bool InInterface); + virtual void CodeCompleteObjCAtVisibility(Scope *S); virtual void CodeCompleteObjCAtStatement(Scope *S); virtual void CodeCompleteObjCAtExpression(Scope *S); virtual void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS); diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 9f92641f0df..b828a02255a 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/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); |

