From 1f1c899cc083c55daf7cc4591bf92f6103fac4ed Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 5 Oct 2009 11:38:54 +0200 Subject: Improved template instantiation. --- src/plugins/cpptools/cppcodecompletion.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src/plugins/cpptools/cppcodecompletion.cpp') diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 988bba9966..cd0c8f705e 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1011,7 +1011,7 @@ bool CppCodeCompletion::completeMember(const QList &re ResolveExpression resolveExpression(context); ResolveClass resolveClass; - const QList candidates = resolveClass(result, context); + const QList candidates = resolveClass(namedTy->name(), result, context); foreach (Symbol *classObject, candidates) { const QList overloads = resolveExpression.resolveArrowOperator(result, namedTy, @@ -1026,9 +1026,10 @@ bool CppCodeCompletion::completeMember(const QList &re ty = funTy->returnType().simplified(); if (PointerType *ptrTy = ty->asPointerType()) { - if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { + FullySpecifiedType elementTy = ptrTy->elementType().simplified(); + if (NamedType *namedTy = elementTy->asNamedType()) { const QList classes = - resolveClass(namedTy, result, context); + resolveClass(namedTy->name(), result, context); foreach (Symbol *c, classes) { if (! classObjectCandidates.contains(c)) @@ -1039,17 +1040,18 @@ bool CppCodeCompletion::completeMember(const QList &re } } } else if (PointerType *ptrTy = ty->asPointerType()) { - if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { + FullySpecifiedType elementTy = ptrTy->elementType().simplified(); + if (NamedType *namedTy = elementTy->asNamedType()) { ResolveClass resolveClass; - const QList classes = resolveClass(namedTy, result, + const QList classes = resolveClass(namedTy->name(), result, context); foreach (Symbol *c, classes) { if (! classObjectCandidates.contains(c)) classObjectCandidates.append(c); } - } else if (Class *classTy = ptrTy->elementType()->asClassType()) { + } else if (Class *classTy = elementTy->asClassType()) { // typedef struct { int x } *Ptr; // Ptr p; // p-> @@ -1099,7 +1101,7 @@ bool CppCodeCompletion::completeMember(const QList &re if (namedTy) { ResolveClass resolveClass; - const QList symbols = resolveClass(namedTy, result, + const QList symbols = resolveClass(namedTy->name(), result, context); foreach (Symbol *symbol, symbols) { if (classObjectCandidates.contains(symbol)) @@ -1330,7 +1332,7 @@ bool CppCodeCompletion::completeQtMethod(const QList & FullySpecifiedType ty = p.first.simplified(); if (PointerType *ptrTy = ty->asPointerType()) - ty = ptrTy->elementType(); + ty = ptrTy->elementType().simplified(); else continue; // not a pointer or a reference to a pointer. @@ -1339,7 +1341,7 @@ bool CppCodeCompletion::completeQtMethod(const QList & continue; const QList classObjects = - resolveClass(namedTy, p, context); + resolveClass(namedTy->name(), p, context); if (classObjects.isEmpty()) continue; -- cgit v1.2.1