forked from qt-creator/qt-creator
QmlJS: Fix completion inside grouped propery bindings.
Task-number: QTCREATORBUG-3541 Change-Id: Ida8e59b65836c8515fbfbd2a9e4737d9ae04e76c Reviewed-on: http://codereview.qt.nokia.com/639 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
This commit is contained in:
@@ -433,8 +433,10 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
|
||||
|
||||
const Interpreter::ObjectValue *qmlScopeType = 0;
|
||||
if (contextFinder.isInQmlContext()) {
|
||||
// find the enclosing qml object
|
||||
// ### this should use semanticInfo.declaringMember instead, but that may also return functions
|
||||
for (int i = path.size() - 1; i >= 0; --i) {
|
||||
int i;
|
||||
for (i = path.size() - 1; i >= 0; --i) {
|
||||
AST::Node *node = path[i];
|
||||
if (AST::cast<AST::UiObjectDefinition *>(node) || AST::cast<AST::UiObjectBinding *>(node)) {
|
||||
qmlScopeType = document->bind()->findQmlObject(node);
|
||||
@@ -442,6 +444,25 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
|
||||
break;
|
||||
}
|
||||
}
|
||||
// grouped property bindings change the scope type
|
||||
for (i++; i < path.size(); ++i) {
|
||||
AST::UiObjectDefinition *objDef = AST::cast<AST::UiObjectDefinition *>(path[i]);
|
||||
if (!objDef || !document->bind()->isGroupedPropertyBinding(objDef))
|
||||
break;
|
||||
const Interpreter::ObjectValue *newScopeType = qmlScopeType;
|
||||
for (AST::UiQualifiedId *it = objDef->qualifiedTypeNameId; it; it = it->next) {
|
||||
if (!newScopeType || !it->name) {
|
||||
newScopeType = 0;
|
||||
break;
|
||||
}
|
||||
const Interpreter::Value *v = newScopeType->lookupMember(it->name->asString(), context);
|
||||
v = context->lookupReference(v);
|
||||
newScopeType = Interpreter::value_cast<const Interpreter::ObjectValue *>(v);
|
||||
}
|
||||
if (!newScopeType)
|
||||
break;
|
||||
qmlScopeType = newScopeType;
|
||||
}
|
||||
// fallback to getting the base type object
|
||||
if (!qmlScopeType)
|
||||
qmlScopeType = context->lookupType(document.data(), contextFinder.qmlObjectTypeName());
|
||||
|
||||
Reference in New Issue
Block a user