ScopeTree: Make methods a QMultiHash

You can have multiple overloads with the same name.

Change-Id: Ifffcc634e96b41f99152092b72b61dad64713b23
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
Ulf Hermann 2020-04-09 18:43:43 +02:00
parent 32e03a7233
commit e9d2bbdcb0
2 changed files with 15 additions and 10 deletions

View File

@ -627,13 +627,18 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::UiScriptBinding *uisb)
}
}
auto method = m_currentScope->methods()[signal];
for (auto const &param : method.parameterNames()) {
const auto firstSourceLocation = statement->firstSourceLocation();
bool hasMultilineStatementBody
= statement->lastSourceLocation().startLine > firstSourceLocation.startLine;
m_currentScope->insertSignalIdentifier(param, method, firstSourceLocation,
hasMultilineStatementBody);
const auto methods = m_currentScope->methods();
const auto methodsRange = methods.equal_range(signal);
for (auto method = methodsRange.first; method != methodsRange.second; ++method) {
if (method->methodType() != MetaMethod::Signal)
continue;
for (auto const &param : method->parameterNames()) {
const auto firstSourceLocation = statement->firstSourceLocation();
bool hasMultilineStatementBody
= statement->lastSourceLocation().startLine > firstSourceLocation.startLine;
m_currentScope->insertSignalIdentifier(param, *method, firstSourceLocation,
hasMultilineStatementBody);
}
}
return true;
}

View File

@ -119,9 +119,9 @@ public:
ScopeType scopeType() const { return m_scopeType; }
void addMethods(const QHash<QString, MetaMethod> &methods) { m_methods.insert(methods); }
void addMethods(const QMultiHash<QString, MetaMethod> &methods) { m_methods.unite(methods); }
void addMethod(const MetaMethod &method) { m_methods.insert(method.methodName(), method); }
QHash<QString, MetaMethod> methods() const { return m_methods; }
QMultiHash<QString, MetaMethod> methods() const { return m_methods; }
void addEnum(const MetaEnum &fakeEnum) { m_enums.insert(fakeEnum.name(), fakeEnum); }
QHash<QString, MetaEnum> enums() const { return m_enums; }
@ -194,7 +194,7 @@ private:
QSet<QString> m_jsIdentifiers;
QMultiHash<QString, MethodUsage> m_injectedSignalIdentifiers;
QHash<QString, MetaMethod> m_methods;
QMultiHash<QString, MetaMethod> m_methods;
QHash<QString, MetaProperty> m_properties;
QHash<QString, MetaEnum> m_enums;