summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/CodeCompleteConsumer.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-08-23 23:00:57 +0000
committerDouglas Gregor <dgregor@apple.com>2010-08-23 23:00:57 +0000
commitf757a12dfc91b3ac8464ba2c9971d92e4bfafbec (patch)
treee52d519b2d3cf34dbab08bde2054153f9eb2a5d6 /clang/lib/Sema/CodeCompleteConsumer.cpp
parent616d3e71c24e2e724d83a2f3f4d885310e6fe479 (diff)
downloadbcm5719-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.cpp15
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?");
OpenPOWER on IntegriCloud