From 60f76c96e8cf9b751e6250a9f80d2517adaf7a5b Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 12 May 2010 12:53:16 +0200 Subject: Improved LookupItem and get rid of some deprecated code. --- src/plugins/cpptools/cppcodecompletion.cpp | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'src/plugins/cpptools/cppcodecompletion.cpp') diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 977fb4001a..bd2c4f87a1 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -754,15 +754,17 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, } } + Scope *scope = thisDocument->scopeAt(line, column); + Q_ASSERT(scope != 0); - QList results = typeOfExpression(expression, lastVisibleSymbol, TypeOfExpression::Preprocess); + QList results = typeOfExpression(expression, scope, TypeOfExpression::Preprocess); LookupContext context = typeOfExpression.lookupContext(); if (results.isEmpty()) { if (m_completionOperator == T_SIGNAL || m_completionOperator == T_SLOT) { if (! (expression.isEmpty() || expression == QLatin1String("this"))) { expression = QLatin1String("this"); - results = typeOfExpression(expression, lastVisibleSymbol); + results = typeOfExpression(expression, scope); } if (results.isEmpty()) @@ -785,7 +787,7 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, // Resolve the type of this expression const QList results = - typeOfExpression(baseExpression, lastVisibleSymbol, + typeOfExpression(baseExpression, scope, TypeOfExpression::Preprocess); // If it's a class, add completions for the constructors @@ -930,10 +932,10 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList &r foreach (const LookupItem &result, results) { FullySpecifiedType ty = result.type().simplified(); - Symbol *lastVisibleSymbol = result.lastVisibleSymbol(); + Scope *scope = result.scope(); if (NamedType *namedTy = ty->asNamedType()) { - if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), lastVisibleSymbol)) { + if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), scope)) { foreach (Symbol *overload, b->lookup(functionCallOp)) { FullySpecifiedType overloadTy = overload->type().simplified(); @@ -966,8 +968,8 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList &r // find a scope that encloses the current location, starting from the lastVisibileSymbol // and moving outwards Scope *sc = 0; - if (typeOfExpression.lastVisibleSymbol()) - sc = typeOfExpression.lastVisibleSymbol()->scope(); + if (typeOfExpression.scope()) + sc = typeOfExpression.scope(); else if (context.thisDocument()) sc = context.thisDocument()->globalSymbols(); @@ -1054,7 +1056,7 @@ bool CppCodeCompletion::completeMember(const QList &baseResults, if (baseResults.isEmpty()) return false; - ResolveExpression resolveExpression(typeOfExpression.lastVisibleSymbol(), context); + ResolveExpression resolveExpression(context); bool replacedDotOperator = false; const QList classObjectResults = @@ -1064,21 +1066,22 @@ bool CppCodeCompletion::completeMember(const QList &baseResults, ClassOrNamespace *classOrNamespace = 0; - QList classObjectCandidates; foreach (const LookupItem &r, classObjectResults) { FullySpecifiedType ty = r.type().simplified(); - if (Class *klass = ty->asClassType()) - classObjectCandidates.append(klass); + if (Class *klass = ty->asClassType()) { + if (ClassOrNamespace *b = context.classOrNamespace(klass)) { + classOrNamespace = b; + break; + } + } else if (NamedType *namedTy = ty->asNamedType()) { - if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), r.lastVisibleSymbol())) { + if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), r.scope())) { classOrNamespace = b; break; - } else { Overview oo; - qDebug() << "*** no class for" << oo(namedTy->name()); } } @@ -1109,10 +1112,10 @@ bool CppCodeCompletion::completeScope(const QList &results, foreach (const LookupItem &result, results) { FullySpecifiedType ty = result.type(); - Symbol *lastVisibleSymbol = result.lastVisibleSymbol(); + Scope *scope = result.scope(); if (NamedType *namedTy = ty->asNamedType()) { - if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), lastVisibleSymbol)) { + if (ClassOrNamespace *b = context.classOrNamespace(namedTy->name(), scope)) { completeClass(b, context); break; } @@ -1353,7 +1356,7 @@ bool CppCodeCompletion::completeQtMethod(const QList &results, if (results.isEmpty()) return false; - DeprecatedLookupContext context(typeOfExpression.lastVisibleSymbol(), + DeprecatedLookupContext context(typeOfExpression.scope()->owner(), newContext.expressionDocument(), newContext.thisDocument(), newContext.snapshot()); @@ -1377,7 +1380,7 @@ bool CppCodeCompletion::completeQtMethod(const QList &results, if (! namedTy) // not a class name. continue; - ClassOrNamespace *b = newContext.classOrNamespace(namedTy->name(), p.lastVisibleSymbol()); + ClassOrNamespace *b = newContext.classOrNamespace(namedTy->name(), p.scope()); if (! b) continue; -- cgit v1.2.1