forked from qt-creator/qt-creator
Improve QmlLookupContext::resolve
This commit is contained in:
@@ -91,22 +91,43 @@ static inline QmlSymbol *resolveParent(const QStack<QmlSymbol*> &scopes)
|
|||||||
|
|
||||||
QmlSymbol *QmlLookupContext::resolve(const QString &name)
|
QmlSymbol *QmlLookupContext::resolve(const QString &name)
|
||||||
{
|
{
|
||||||
// look at property definitions
|
// find element type names
|
||||||
if (!_scopes.isEmpty())
|
if (QmlSymbol *type = resolveType(name))
|
||||||
if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.top(), _doc->fileName()))
|
return type;
|
||||||
return propertySymbol;
|
|
||||||
|
// find ids
|
||||||
|
const QmlDocument::IdTable ids = _doc->ids();
|
||||||
|
if (ids.contains(name))
|
||||||
|
return ids[name];
|
||||||
|
|
||||||
if (name == "parent") {
|
if (name == "parent") {
|
||||||
return resolveParent(_scopes);
|
return resolveParent(_scopes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// look at the ids.
|
// find script methods
|
||||||
const QmlDocument::IdTable ids = _doc->ids();
|
// ### TODO
|
||||||
|
|
||||||
if (ids.contains(name))
|
// find properties of the scope object
|
||||||
return ids[name];
|
int scopeObjectIndex = findFirstQmlObjectScope(_scopes, _scopes.size() - 1);
|
||||||
else
|
if (scopeObjectIndex != -1)
|
||||||
return resolveType(name);
|
if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.at(scopeObjectIndex), _doc->fileName()))
|
||||||
|
return propertySymbol;
|
||||||
|
|
||||||
|
// find properties of the component's root object
|
||||||
|
if (!_doc->symbols().isEmpty())
|
||||||
|
if (QmlSymbol *propertySymbol = resolveProperty(name, _doc->symbols()[0], _doc->fileName()))
|
||||||
|
return propertySymbol;
|
||||||
|
|
||||||
|
// component chain
|
||||||
|
// ### TODO: Might lead to ambiguity.
|
||||||
|
|
||||||
|
// context chain
|
||||||
|
// ### TODO: ?
|
||||||
|
|
||||||
|
// global object
|
||||||
|
// ### TODO
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
QmlSymbol *QmlLookupContext::resolveType(const QString &name, const QString &fileName)
|
QmlSymbol *QmlLookupContext::resolveType(const QString &name, const QString &fileName)
|
||||||
|
Reference in New Issue
Block a user