diff --git a/duchain/expressionvisitor.cpp b/duchain/expressionvisitor.cpp --- a/duchain/expressionvisitor.cpp +++ b/duchain/expressionvisitor.cpp @@ -226,6 +226,18 @@ forever { AbstractType::Ptr type = parameterType(it->element, {}, m_editor, m_currentContext); closureType->addArgument(type); + + if (it->element->parameterType && it->element->parameterType->objectType) { + NamespacedIdentifierAst* objectType = it->element->parameterType->objectType; + QualifiedIdentifier id = identifierForNamespace(objectType, m_editor); + DeclarationPointer dec = findDeclarationImport(ClassDeclarationType, id); + + usingDeclaration(objectType->namespaceNameSequence->back()->element, dec); + buildNamespaceUses(objectType, id); + } + if (it->element->defaultValue) { + visitStaticScalar(it->element->defaultValue); + } if ( it->hasNext() ) { it = it->next; } else { diff --git a/duchain/tests/uses.h b/duchain/tests/uses.h --- a/duchain/tests/uses.h +++ b/duchain/tests/uses.h @@ -81,6 +81,7 @@ void useNamespace(); void lateStatic(); void closures(); + void closureTypehints(); void instanceof(); void classNameString(); void useTrait(); diff --git a/duchain/tests/uses.cpp b/duchain/tests/uses.cpp --- a/duchain/tests/uses.cpp +++ b/duchain/tests/uses.cpp @@ -1067,6 +1067,18 @@ QVERIFY(b->uses().isEmpty()); } +void TestUses::closureTypehints() { + TopDUContext* top = parse("localDeclarations().count(), 3); + Declaration* a = top->localDeclarations().at(0); + QCOMPARE(a->qualifiedIdentifier(), QualifiedIdentifier("a")); + compareUses(a, QList() << RangeInRevision(0, 32, 0, 33)); +} + void TestUses::instanceof() { // 0 1 2 3 4 5