[CodeComplete] Omit templated constructors from member list too.
Also avoid printing a 'void' return type for constructor expressions. llvm-svn: 323148
This commit is contained in:
parent
1b9a4ffd6b
commit
63c5972039
|
@ -843,6 +843,12 @@ void ResultBuilder::MaybeAddConstructorResults(Result R) {
|
|||
}
|
||||
}
|
||||
|
||||
static bool isConstructor(const Decl *ND) {
|
||||
if (const auto *Tmpl = dyn_cast<FunctionTemplateDecl>(ND))
|
||||
ND = Tmpl->getTemplatedDecl();
|
||||
return isa<CXXConstructorDecl>(ND);
|
||||
}
|
||||
|
||||
void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
|
||||
assert(!ShadowMaps.empty() && "Must enter into a results scope");
|
||||
|
||||
|
@ -870,7 +876,7 @@ void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
|
|||
return;
|
||||
|
||||
// C++ constructors are never found by name lookup.
|
||||
if (isa<CXXConstructorDecl>(R.Declaration))
|
||||
if (isConstructor(R.Declaration))
|
||||
return;
|
||||
|
||||
ShadowMap &SMap = ShadowMaps.back();
|
||||
|
@ -983,7 +989,7 @@ void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
|
|||
return;
|
||||
|
||||
// C++ constructors are never found by name lookup.
|
||||
if (isa<CXXConstructorDecl>(R.Declaration))
|
||||
if (isConstructor(R.Declaration))
|
||||
return;
|
||||
|
||||
if (Hiding && CheckHiddenResult(R, CurContext, Hiding))
|
||||
|
@ -2145,7 +2151,7 @@ static void AddResultTypeChunk(ASTContext &Context,
|
|||
|
||||
// Skip constructors and conversion functions, which have their return types
|
||||
// built into their names.
|
||||
if (isa<CXXConstructorDecl>(ND) || isa<CXXConversionDecl>(ND))
|
||||
if (isConstructor(ND) || isa<CXXConversionDecl>(ND))
|
||||
return;
|
||||
|
||||
// Determine the type of the declaration (if it has a type).
|
||||
|
|
|
@ -16,6 +16,8 @@ struct Base3 : Base1, Base2 {
|
|||
};
|
||||
|
||||
struct Derived : Base3 {
|
||||
template <typename T> Derived(T);
|
||||
Derived(int);
|
||||
int member4;
|
||||
int memfun3(int);
|
||||
};
|
||||
|
@ -48,7 +50,7 @@ struct Bar {
|
|||
}
|
||||
};
|
||||
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:29:6 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:31:6 %s -o - | FileCheck -check-prefix=CHECK-CC1 --implicit-check-not="Derived : Derived(" %s
|
||||
// CHECK-CC1: Base1 : Base1::
|
||||
// CHECK-CC1: member1 : [#int#][#Base1::#]member1
|
||||
// CHECK-CC1: member1 : [#int#][#Base2::#]member1
|
||||
|
@ -62,10 +64,10 @@ struct Bar {
|
|||
// CHECK-CC1: memfun3 : [#int#]memfun3(<#int#>)
|
||||
|
||||
// Make sure this doesn't crash
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:36:7 %s -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:38:7 %s -verify
|
||||
|
||||
// Make sure this also doesn't crash
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:47:14 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:49:14 %s
|
||||
|
||||
|
||||
template<typename T>
|
||||
|
@ -100,8 +102,8 @@ void completeDependentMembers(TemplateClass<T, S> &object,
|
|||
// CHECK-CC2: overload1 : [#void#]overload1(<#const T &#>)
|
||||
// CHECK-CC2: overload1 : [#void#]overload1(<#const S &#>)
|
||||
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:92:10 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:93:12 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:94:10 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:95:12 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
}
|
||||
|
||||
|
||||
|
@ -118,8 +120,8 @@ void completeDependentSpecializedMembers(TemplateClass<int, double> &object,
|
|||
// CHECK-CC3: overload1 : [#void#]overload1(<#const int &#>)
|
||||
// CHECK-CC3: overload1 : [#void#]overload1(<#const double &#>)
|
||||
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:110:10 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:111:12 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:112:10 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:113:12 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
@ -133,17 +135,17 @@ public:
|
|||
// CHECK-CC4: BaseTemplate : BaseTemplate::
|
||||
// CHECK-CC4: baseTemplateField : [#int#]baseTemplateField
|
||||
// CHECK-CC4: baseTemplateFunction : [#int#]baseTemplateFunction()
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:132:8 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:134:8 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
|
||||
o2.baseTemplateField;
|
||||
// CHECK-CC5: BaseTemplate : BaseTemplate::
|
||||
// CHECK-CC5: baseTemplateField : [#T#]baseTemplateField
|
||||
// CHECK-CC5: baseTemplateFunction : [#T#]baseTemplateFunction()
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:137:8 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:139:8 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s
|
||||
this->o1;
|
||||
// CHECK-CC6: [#void#]function()
|
||||
// CHECK-CC6: o1 : [#BaseTemplate<int>#]o1
|
||||
// CHECK-CC6: o2 : [#BaseTemplate<T>#]o2
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:142:11 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:144:11 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s
|
||||
}
|
||||
|
||||
static void staticFn(T &obj);
|
||||
|
@ -160,7 +162,7 @@ void dependentColonColonCompletion() {
|
|||
// CHECK-CC7: o2 : [#BaseTemplate<T>#]o2
|
||||
// CHECK-CC7: staticFn : [#void#]staticFn(<#T &obj#>)
|
||||
// CHECK-CC7: Template : Template
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:156:16 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:158:16 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
|
||||
typename Template<T>::Nested m;
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:164:25 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:166:25 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace N {
|
|||
// CHECK-CC1: CXXConstructor:{TypedText string}{LeftParen (}{Placeholder const char *}{Comma , }{Placeholder int n}{RightParen )} (50)
|
||||
// CHECK-CC1: ClassTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50)
|
||||
// CHECK-CC1: CXXConstructor:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder const T &}{Comma , }{Placeholder unsigned int n}{RightParen )} (50)
|
||||
// CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder InputIterator first}{Comma , }{Placeholder InputIterator last}{RightParen )} (50)
|
||||
// CHECK-CC1: FunctionTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder InputIterator first}{Comma , }{Placeholder InputIterator last}{RightParen )} (50)
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:19:1 %s | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:19:1 %s | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
|
@ -72,7 +72,7 @@ namespace N {
|
|||
// CHECK-CC3: FunctionDecl:{ResultType void}{TypedText g}{LeftParen (}{RightParen )} (50)
|
||||
// CHECK-CC3: ClassTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50)
|
||||
// CHECK-CC3: CXXConstructor:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder const T &}{Comma , }{Placeholder unsigned int n}{RightParen )} (50)
|
||||
// CHECK-CC3: FunctionTemplate:{ResultType void}{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder InputIterator first}{Comma , }{Placeholder InputIterator last}{RightParen )} (50)
|
||||
// CHECK-CC3: FunctionTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder InputIterator first}{Comma , }{Placeholder InputIterator last}{RightParen )} (50)
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:34:1 %s -std=c++0x | FileCheck -check-prefix=CHECK-CC4 %s
|
||||
// CHECK-CC4: NotImplemented:{ResultType const X *}{TypedText this} (40)
|
||||
|
|
Loading…
Reference in New Issue