From cae8a31a7da591865a3163907bcbc3b63b21465b Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 30 Sep 2009 11:24:00 +0200 Subject: [PATCH] FullySpecifiedType::simplified() strips references from the type. --- src/plugins/cpptools/cppcodecompletion.cpp | 25 +++++---------------- src/shared/cplusplus/FullySpecifiedType.cpp | 8 +++++++ src/shared/cplusplus/FullySpecifiedType.h | 2 ++ 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index bc1d1d4ad72..ada7f48ab77 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -988,10 +988,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re QList<Symbol *> classObjectCandidates; if (m_completionOperator == T_ARROW) { - FullySpecifiedType ty = result.first; - - if (ReferenceType *refTy = ty->asReferenceType()) - ty = refTy->elementType(); + FullySpecifiedType ty = result.first.simplified(); if (Class *classTy = ty->asClassType()) { Symbol *symbol = result.second; @@ -1026,10 +1023,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re if (! funTy) continue; - ty = funTy->returnType(); - - if (ReferenceType *refTy = ty->asReferenceType()) - ty = refTy->elementType(); + ty = funTy->returnType().simplified(); if (PointerType *ptrTy = ty->asPointerType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { @@ -1063,19 +1057,13 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re } } } else if (m_completionOperator == T_DOT) { - FullySpecifiedType ty = result.first; - - if (ReferenceType *refTy = ty->asReferenceType()) - ty = refTy->elementType(); + FullySpecifiedType ty = result.first.simplified(); NamedType *namedTy = 0; if (ArrayType *arrayTy = ty->asArrayType()) { // Replace . with [0]. when `ty' is an array type. - FullySpecifiedType elementTy = arrayTy->elementType(); - - if (ReferenceType *refTy = elementTy->asReferenceType()) - elementTy = refTy->elementType(); + FullySpecifiedType elementTy = arrayTy->elementType().simplified(); if (elementTy->isNamedType() || elementTy->isPointerType()) { ty = elementTy; @@ -1322,9 +1310,8 @@ bool CppCodeCompletion::completeQtMethod(const QList<TypeOfExpression::Result> & QSet<QString> signatures; foreach (const TypeOfExpression::Result &p, results) { - FullySpecifiedType ty = p.first; - if (ReferenceType *refTy = ty->asReferenceType()) - ty = refTy->elementType(); + FullySpecifiedType ty = p.first.simplified(); + if (PointerType *ptrTy = ty->asPointerType()) ty = ptrTy->elementType(); else diff --git a/src/shared/cplusplus/FullySpecifiedType.cpp b/src/shared/cplusplus/FullySpecifiedType.cpp index 410541ac0cf..58711ac8a96 100644 --- a/src/shared/cplusplus/FullySpecifiedType.cpp +++ b/src/shared/cplusplus/FullySpecifiedType.cpp @@ -201,4 +201,12 @@ bool FullySpecifiedType::operator < (const FullySpecifiedType &other) const return _type < other._type; } +FullySpecifiedType FullySpecifiedType::simplified() const +{ + if (const ReferenceType *refTy = type()->asReferenceType()) + return refTy->elementType().simplified(); + + return *this; +} + CPLUSPLUS_END_NAMESPACE diff --git a/src/shared/cplusplus/FullySpecifiedType.h b/src/shared/cplusplus/FullySpecifiedType.h index 4cd4db79712..b9a1c3fa397 100644 --- a/src/shared/cplusplus/FullySpecifiedType.h +++ b/src/shared/cplusplus/FullySpecifiedType.h @@ -119,6 +119,8 @@ public: bool operator != (const FullySpecifiedType &other) const; bool operator < (const FullySpecifiedType &other) const; + FullySpecifiedType simplified() const; + private: Type *_type; struct Flags { -- GitLab