diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index dc7ccbf04c8cca660668d5a4dca08808b6d984ae..a6b5203f233475ad110be152c198f8aae0d772d4 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -649,41 +649,30 @@ bool ResolveExpression::visit(PostIncrDecrAST *) return false; } -bool ResolveExpression::visit(ObjCMessageExpressionAST *) +bool ResolveExpression::visit(ObjCMessageExpressionAST *ast) { - qWarning() << "TODO" << Q_FUNC_INFO; - return false; - -#if 0 const QList<LookupItem> receiverResults = resolve(ast->receiver_expression); - if (!receiverResults.isEmpty()) { - LookupItem result = receiverResults.first(); + foreach (const LookupItem &result, receiverResults) { FullySpecifiedType ty = result.type().simplified(); - const Name *klassName = 0; + ClassOrNamespace *binding = 0; - if (const ObjCClass *classTy = ty->asObjCClassType()) { + if (ObjCClass *clazz = ty->asObjCClassType()) { // static access, e.g.: - // [NSObject description]; - klassName = classTy->name(); - } else if (const PointerType *ptrTy = ty->asPointerType()) { - const FullySpecifiedType pointeeTy = ptrTy->elementType(); - if (pointeeTy && pointeeTy->isNamedType()) { + // [NSObject description]; + binding = _context.lookupType(clazz); + } else if (PointerType *ptrTy = ty->asPointerType()) { + if (NamedType *namedTy = ptrTy->asNamedType()) { // dynamic access, e.g.: - // NSObject *obj = ...; [obj release]; - klassName = pointeeTy->asNamedType()->name(); + // NSObject *obj = ...; [obj release]; + binding = _context.lookupType(namedTy->name(), result.scope()); } } - if (klassName&&ast->selector && ast->selector->name) { - const QList<Symbol *> resolvedSymbols = _context.lookup(klassName, result.scope()); - foreach (Symbol *resolvedSymbol, resolvedSymbols) - if (ObjCClass *klass = resolvedSymbol->asObjCClass()) - _results.append(resolveMember(ast->selector->name, klass)); - } + if (binding) + addResults(binding->lookup(ast->selector->name)); } return false; -#endif }