forked from qt-creator/qt-creator
QmlJS: Provide good completion for PropertyChanges with a target again.
Task-number: QTCREATORBUG-1413 Reviewed-by: Erik Verbruggen
This commit is contained in:
@@ -106,14 +106,7 @@ void ScopeBuilder::setQmlScopeObject(Node *node)
|
|||||||
|
|
||||||
// check if the object has a Qt.PropertyChanges ancestor
|
// check if the object has a Qt.PropertyChanges ancestor
|
||||||
prototype = scopeObject->prototype(_context);
|
prototype = scopeObject->prototype(_context);
|
||||||
while (prototype) {
|
prototype = isPropertyChangesObject(_context, prototype);
|
||||||
if (const QmlObjectValue *qmlMetaObject = dynamic_cast<const QmlObjectValue *>(prototype)) {
|
|
||||||
if (qmlMetaObject->className() == QLatin1String("PropertyChanges")
|
|
||||||
&& qmlMetaObject->packageName() == QLatin1String("Qt"))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
prototype = prototype->prototype(_context);
|
|
||||||
}
|
|
||||||
// find the target script binding
|
// find the target script binding
|
||||||
if (prototype) {
|
if (prototype) {
|
||||||
UiObjectInitializer *initializer = 0;
|
UiObjectInitializer *initializer = 0;
|
||||||
@@ -169,3 +162,19 @@ const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id)
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const ObjectValue *ScopeBuilder::isPropertyChangesObject(Context *context,
|
||||||
|
const ObjectValue *object)
|
||||||
|
{
|
||||||
|
const ObjectValue *prototype = object;
|
||||||
|
while (prototype) {
|
||||||
|
if (const QmlObjectValue *qmlMetaObject = dynamic_cast<const QmlObjectValue *>(prototype)) {
|
||||||
|
if (qmlMetaObject->className() == QLatin1String("PropertyChanges")
|
||||||
|
&& qmlMetaObject->packageName() == QLatin1String("Qt"))
|
||||||
|
return prototype;
|
||||||
|
}
|
||||||
|
prototype = prototype->prototype(context);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ namespace AST {
|
|||||||
namespace Interpreter {
|
namespace Interpreter {
|
||||||
class Context;
|
class Context;
|
||||||
class Value;
|
class Value;
|
||||||
|
class ObjectValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
class QMLJS_EXPORT ScopeBuilder
|
class QMLJS_EXPORT ScopeBuilder
|
||||||
@@ -26,6 +27,8 @@ public:
|
|||||||
void push(const QList<AST::Node *> &nodes);
|
void push(const QList<AST::Node *> &nodes);
|
||||||
void pop();
|
void pop();
|
||||||
|
|
||||||
|
static const Interpreter::ObjectValue *isPropertyChangesObject(Interpreter::Context *context, const Interpreter::ObjectValue *object);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setQmlScopeObject(AST::Node *node);
|
void setQmlScopeObject(AST::Node *node);
|
||||||
const Interpreter::Value *scopeObjectLookup(AST::UiQualifiedId *id);
|
const Interpreter::Value *scopeObjectLookup(AST::UiQualifiedId *id);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <qmljs/qmljsscanner.h>
|
#include <qmljs/qmljsscanner.h>
|
||||||
#include <qmljs/qmljsevaluate.h>
|
#include <qmljs/qmljsevaluate.h>
|
||||||
#include <qmljs/qmljscompletioncontextfinder.h>
|
#include <qmljs/qmljscompletioncontextfinder.h>
|
||||||
|
#include <qmljs/qmljsscopebuilder.h>
|
||||||
|
|
||||||
#include <texteditor/basetexteditor.h>
|
#include <texteditor/basetexteditor.h>
|
||||||
|
|
||||||
@@ -687,6 +688,11 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
|||||||
|
|
||||||
addCompletions(enumerateProperties(qmlScopeType), symbolIcon);
|
addCompletions(enumerateProperties(qmlScopeType), symbolIcon);
|
||||||
addCompletions(enumerateProperties(context.scopeChain().qmlTypes), symbolIcon);
|
addCompletions(enumerateProperties(context.scopeChain().qmlTypes), symbolIcon);
|
||||||
|
|
||||||
|
if (ScopeBuilder::isPropertyChangesObject(&context, qmlScopeType)
|
||||||
|
&& context.scopeChain().qmlScopeObjects.size() == 2) {
|
||||||
|
addCompletions(enumerateProperties(context.scopeChain().qmlScopeObjects.first()), symbolIcon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contextFinder.isInRhsOfBinding() && qmlScopeType) {
|
if (contextFinder.isInRhsOfBinding() && qmlScopeType) {
|
||||||
|
|||||||
Reference in New Issue
Block a user