summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-05 11:38:54 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-05 11:39:55 +0200
commit1f1c899cc083c55daf7cc4591bf92f6103fac4ed (patch)
tree0028311bea9191f368a5780cf977bb2ef33a9302 /src/plugins/cpptools/cppcodecompletion.cpp
parent5948e284bb576aa21b6adb3031a7a891861ffd06 (diff)
downloadqt-creator-1f1c899cc083c55daf7cc4591bf92f6103fac4ed.tar.gz
Improved template instantiation.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp20
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;