diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-05 11:38:54 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-05 11:39:55 +0200 |
commit | 1f1c899cc083c55daf7cc4591bf92f6103fac4ed (patch) | |
tree | 0028311bea9191f368a5780cf977bb2ef33a9302 /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | 5948e284bb576aa21b6adb3031a7a891861ffd06 (diff) | |
download | qt-creator-1f1c899cc083c55daf7cc4591bf92f6103fac4ed.tar.gz |
Improved template instantiation.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
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<TypeOfExpression::Result> &re ResolveExpression resolveExpression(context); ResolveClass resolveClass; - const QList<Symbol *> candidates = resolveClass(result, context); + const QList<Symbol *> candidates = resolveClass(namedTy->name(), result, context); foreach (Symbol *classObject, candidates) { const QList<TypeOfExpression::Result> overloads = resolveExpression.resolveArrowOperator(result, namedTy, @@ -1026,9 +1026,10 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &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<Symbol *> 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<TypeOfExpression::Result> &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<Symbol *> classes = resolveClass(namedTy, result, + const QList<Symbol *> 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<TypeOfExpression::Result> &re if (namedTy) { ResolveClass resolveClass; - const QList<Symbol *> symbols = resolveClass(namedTy, result, + const QList<Symbol *> symbols = resolveClass(namedTy->name(), result, context); foreach (Symbol *symbol, symbols) { if (classObjectCandidates.contains(symbol)) @@ -1330,7 +1332,7 @@ bool CppCodeCompletion::completeQtMethod(const QList<TypeOfExpression::Result> & 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<TypeOfExpression::Result> & continue; const QList<Symbol *> classObjects = - resolveClass(namedTy, p, context); + resolveClass(namedTy->name(), p, context); if (classObjects.isEmpty()) continue; |