diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index f5e6015947443a6e3ede1ea515dbbbca5c35f0ba..29016a0d0a9c47031227ffc437746bb498c74543 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -63,9 +63,11 @@ static void fullyQualifiedName_helper(Symbol *symbol, QList<const Name *> *names } else if (symbol->name()->isNameId() || symbol->name()->isTemplateNameId()) { names->append(symbol->name()); - } - + } else if (symbol->isObjCClass() || symbol->isObjCBaseClass() || symbol->isObjCProtocol() + || symbol->isObjCForwardClassDeclaration() || symbol->isObjCForwardProtocolDeclaration()) { + if (symbol->name()) + names->append(symbol->name()); } else if (symbol->isFunction()) { if (const QualifiedNameId *q = symbol->name()->asQualifiedNameId()) { for (unsigned i = 0; i < q->nameCount() - 1; ++i) @@ -73,7 +75,6 @@ static void fullyQualifiedName_helper(Symbol *symbol, QList<const Name *> *names } } } - } bool ClassOrNamespace::CompareName::operator()(const Name *name, const Name *other) const diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp index d65fbf636debd7fb38fdd975a496cf9c8e4f6ed3..fdf432704e39990f1806214682eb9bb2dac0acb6 100644 --- a/tests/auto/cplusplus/lookup/tst_lookup.cpp +++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp @@ -144,10 +144,15 @@ void tst_Lookup::simple_class_1() QVERIFY(!impl->isInterface()); QCOMPARE(impl->memberCount(), 3U); - ObjCMethod *allocMethod = impl->memberAt(0)->asObjCMethod(); - QVERIFY(allocMethod); - QVERIFY(allocMethod->name() && allocMethod->name()->identifier()); - QCOMPARE(QLatin1String(allocMethod->name()->identifier()->chars()), QLatin1String("alloc")); + Declaration *allocMethodIface = iface->memberAt(0)->asDeclaration(); + QVERIFY(allocMethodIface); + QVERIFY(allocMethodIface->name() && allocMethodIface->name()->identifier()); + QCOMPARE(QLatin1String(allocMethodIface->name()->identifier()->chars()), QLatin1String("alloc")); + + ObjCMethod *allocMethodImpl = impl->memberAt(0)->asObjCMethod(); + QVERIFY(allocMethodImpl); + QVERIFY(allocMethodImpl->name() && allocMethodImpl->name()->identifier()); + QCOMPARE(QLatin1String(allocMethodImpl->name()->identifier()->chars()), QLatin1String("alloc")); ObjCMethod *deallocMethod = impl->memberAt(2)->asObjCMethod(); QVERIFY(deallocMethod); @@ -164,12 +169,12 @@ void tst_Lookup::simple_class_1() QVERIFY(klass->symbols().contains(impl)); // check method resolving: - QList<Symbol *> results = context.lookup(allocMethod->name(), impl->scope()); + QList<Symbol *> results = context.lookup(allocMethodImpl->name(), impl->members()); QCOMPARE(results.size(), 2); - QCOMPARE(results.at(0), allocMethod); - QCOMPARE(results.at(1), allocMethod); + QCOMPARE(results.at(0), allocMethodIface); + QCOMPARE(results.at(1), allocMethodImpl); - results = context.lookup(deallocMethod->name(), impl->scope()); + results = context.lookup(deallocMethod->name(), impl->members()); QCOMPARE(results.size(), 1); QCOMPARE(results.at(0), deallocMethod); } @@ -225,11 +230,11 @@ void tst_Lookup::class_with_baseclass() QVERIFY(objClass != 0); QVERIFY(objClass->symbols().contains(baseZoo)); - QList<Symbol *> results = context.lookup(baseDecl->name(), zooImpl->scope()); + QList<Symbol *> results = context.lookup(baseDecl->name(), zooImpl->members()); QCOMPARE(results.size(), 1); QCOMPARE(results.at(0), baseDecl); - results = context.lookup(baseMethod->name(), zooImpl->scope()); + results = context.lookup(baseMethod->name(), zooImpl->members()); QCOMPARE(results.size(), 1); QCOMPARE(results.at(0), baseMethod); } @@ -285,7 +290,7 @@ void tst_Lookup::class_with_protocol_with_protocol() QVERIFY(candidates.contains(P1)); } - QList<Symbol *> results = context.lookup(p1method->name(), zooImpl->scope()); + QList<Symbol *> results = context.lookup(p1method->name(), zooImpl->members()); QCOMPARE(results.size(), 1); QCOMPARE(results.at(0), p1method); }