DeclarationPointer getDeclarationOrSignal(const QualifiedIdentifier& id, const DUContext* context, bool searchInParent) { QString identifier = id.last().toString(); if (identifier.startsWith(QLatin1String("on")) && identifier.size() > 2) { // The use may have typed the name of a QML slot (onFoo), try to get // the declaration of its corresponding signal (foo) identifier = identifier.at(2).toLower() + identifier.mid(3); DeclarationPointer decl = getDeclaration(QualifiedIdentifier(identifier), context, searchInParent); if (decl) { ClassFunctionDeclaration* classFuncDecl = dynamic_cast<ClassFunctionDeclaration *>(decl.data()); if (classFuncDecl && classFuncDecl->isSignal()) { // Removing "on" has given the identifier of a QML signal, return // it instead of the name of its slot return decl; } } } // No signal found, fall back to normal behavior return getDeclaration(id, context, searchInParent); }