diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-09-18 17:54:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-09-18 17:54:00 +0000 |
commit | 75b7128e93d736331bde659b05cd176f9dd6d047 (patch) | |
tree | 05557f2fe3911cd8fabb940715339bae9e0c4bfe | |
parent | 33224e61bfca370850abae89bbd415a4dabe07fa (diff) |
Handle using declarations and overload sets in code completion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82233 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/CodeCompleteConsumer.cpp | 17 | ||||
-rw-r--r-- | test/CodeCompletion/tag.cpp | 7 |
2 files changed, 22 insertions, 2 deletions
diff --git a/lib/Sema/CodeCompleteConsumer.cpp b/lib/Sema/CodeCompleteConsumer.cpp index 7dee12a3dc..b626847d62 100644 --- a/lib/Sema/CodeCompleteConsumer.cpp +++ b/lib/Sema/CodeCompleteConsumer.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// #include "clang/Sema/CodeCompleteConsumer.h" +#include "clang/AST/DeclCXX.h" #include "clang/Parse/Scope.h" #include "clang/Lex/Preprocessor.h" #include "Sema.h" @@ -123,9 +124,21 @@ void CodeCompleteConsumer::ResultSet::MaybeAddResult(Result R) { Results.push_back(R); return; } + + // Look through using declarations. + if (UsingDecl *Using = dyn_cast<UsingDecl>(R.Declaration)) + return MaybeAddResult(Result(Using->getTargetDecl(), R.Rank)); - // FIXME: Using declarations - // FIXME: Separate overload sets + // Handle each declaration in an overload set separately. + if (OverloadedFunctionDecl *Ovl + = dyn_cast<OverloadedFunctionDecl>(R.Declaration)) { + for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(), + FEnd = Ovl->function_end(); + F != FEnd; ++F) + MaybeAddResult(Result(*F, R.Rank)); + + return; + } Decl *CanonDecl = R.Declaration->getCanonicalDecl(); unsigned IDNS = CanonDecl->getIdentifierNamespace(); diff --git a/test/CodeCompletion/tag.cpp b/test/CodeCompletion/tag.cpp index addad9d769..d8f6f2fa0a 100644 --- a/test/CodeCompletion/tag.cpp +++ b/test/CodeCompletion/tag.cpp @@ -8,13 +8,20 @@ namespace N { template<typename> class Z; } +namespace M { + class A; +} +using M::A; + namespace N { class Y; void test() { // CHECK-CC1: Y : 2 // CHECK-CC1: Z : 2 + // CHECK-CC1: A : 3 // CHECK-CC1: X : 3 // CHECK-CC1: Y : 3 + // CHECK-CC1: M : 6 // CHECK-CC1: N : 6 class |