diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-08-23 23:00:57 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-08-23 23:00:57 +0000 |
commit | f757a12dfc91b3ac8464ba2c9971d92e4bfafbec (patch) | |
tree | e52d519b2d3cf34dbab08bde2054153f9eb2a5d6 /clang/lib/Sema/CodeCompleteConsumer.cpp | |
parent | 616d3e71c24e2e724d83a2f3f4d885310e6fe479 (diff) | |
download | bcm5719-llvm-f757a12dfc91b3ac8464ba2c9971d92e4bfafbec.tar.gz bcm5719-llvm-f757a12dfc91b3ac8464ba2c9971d92e4bfafbec.zip |
Introduce new libclang API functions that determine the availability
of a cursor or code-completion result, e.g., whether that result
refers to an unavailable, deleted, or deprecated declaration.
llvm-svn: 111858
Diffstat (limited to 'clang/lib/Sema/CodeCompleteConsumer.cpp')
-rw-r--r-- | clang/lib/Sema/CodeCompleteConsumer.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/Sema/CodeCompleteConsumer.cpp b/clang/lib/Sema/CodeCompleteConsumer.cpp index 29d97a24145..cab853a5cb5 100644 --- a/clang/lib/Sema/CodeCompleteConsumer.cpp +++ b/clang/lib/Sema/CodeCompleteConsumer.cpp @@ -496,9 +496,16 @@ PrintingCodeCompleteConsumer::ProcessOverloadCandidates(Sema &SemaRef, } } -void CodeCompleteConsumer::Result::computeCursorKind() { +void CodeCompleteConsumer::Result::computeCursorKindAndAvailability() { switch (Kind) { case RK_Declaration: + // Set the availability based on attributes. + Availability = CXAvailability_Available; + if (Declaration->getAttr<UnavailableAttr>()) + Availability = CXAvailability_NotAvailable; + else if (Declaration->getAttr<DeprecatedAttr>()) + Availability = CXAvailability_Deprecated; + switch (Declaration->getKind()) { case Decl::Record: case Decl::CXXRecord: @@ -544,6 +551,8 @@ void CodeCompleteConsumer::Result::computeCursorKind() { case Decl::CXXDestructor: case Decl::CXXConversion: CursorKind = CXCursor_FunctionDecl; + if (cast<FunctionDecl>(Declaration)->isDeleted()) + Availability = CXAvailability_NotAvailable; break; case Decl::Var: @@ -589,10 +598,12 @@ void CodeCompleteConsumer::Result::computeCursorKind() { break; case Result::RK_Macro: + Availability = CXAvailability_Available; CursorKind = CXCursor_MacroDefinition; break; case Result::RK_Keyword: + Availability = CXAvailability_Available; CursorKind = CXCursor_NotImplemented; break; @@ -611,6 +622,7 @@ CIndexCodeCompleteConsumer::ProcessCodeCompleteResults(Sema &SemaRef, for (unsigned I = 0; I != NumResults; ++I) { WriteUnsigned(OS, Results[I].CursorKind); WriteUnsigned(OS, Results[I].Priority); + WriteUnsigned(OS, Results[I].Availability); CodeCompletionString *CCS = Results[I].CreateCodeCompletionString(SemaRef); assert(CCS && "No code-completion string?"); CCS->Serialize(OS); @@ -626,6 +638,7 @@ CIndexCodeCompleteConsumer::ProcessOverloadCandidates(Sema &SemaRef, for (unsigned I = 0; I != NumCandidates; ++I) { WriteUnsigned(OS, CXCursor_NotImplemented); WriteUnsigned(OS, /*Priority=*/0); + WriteUnsigned(OS, /*Availability=*/CXAvailability_Available); CodeCompletionString *CCS = Candidates[I].CreateSignatureString(CurrentArg, SemaRef); assert(CCS && "No code-completion string?"); |