forked from qt-creator/qt-creator
Fixed a bug where a property could be inserted after an object.
This commit is contained in:
@@ -72,7 +72,7 @@ bool AddObjectVisitor::visit(QmlJS::AST::UiObjectDefinition *ast)
|
|||||||
|
|
||||||
void AddObjectVisitor::insertInto(QmlJS::AST::UiObjectInitializer *ast)
|
void AddObjectVisitor::insertInto(QmlJS::AST::UiObjectInitializer *ast)
|
||||||
{
|
{
|
||||||
UiObjectMemberList *insertAfter = searchMemberToInsertAfter(ast->members, QString(), m_propertyOrder);
|
UiObjectMemberList *insertAfter = searchMemberToInsertAfter(ast->members, m_propertyOrder);
|
||||||
|
|
||||||
int insertionPoint;
|
int insertionPoint;
|
||||||
int depth;
|
int depth;
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ private:
|
|||||||
{
|
{
|
||||||
if (targetPropertyName.isEmpty()) {
|
if (targetPropertyName.isEmpty()) {
|
||||||
// insert as UiObjectDefinition:
|
// insert as UiObjectDefinition:
|
||||||
UiObjectMemberList *insertAfter = searchMemberToInsertAfter(ast->members, QString(), propertyOrder);
|
UiObjectMemberList *insertAfter = searchMemberToInsertAfter(ast->members, propertyOrder);
|
||||||
|
|
||||||
if (insertAfter && insertAfter->member) {
|
if (insertAfter && insertAfter->member) {
|
||||||
moveInfo.destination = insertAfter->member->lastSourceLocation().end();
|
moveInfo.destination = insertAfter->member->lastSourceLocation().end();
|
||||||
|
|||||||
@@ -270,6 +270,34 @@ void QMLRewriter::includeLeadingEmptyLine(int &start) const
|
|||||||
start = prevBlock.position();
|
start = prevBlock.position();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QStringList &propertyOrder)
|
||||||
|
{
|
||||||
|
const int objectDefinitionInsertionPoint = propertyOrder.indexOf(QString::null);
|
||||||
|
UiObjectMemberList *previous = 0;
|
||||||
|
for (UiObjectMemberList *iter = members; iter; iter = iter->next) {
|
||||||
|
UiObjectMember *member = iter->member;
|
||||||
|
int idx = -1;
|
||||||
|
|
||||||
|
if (UiArrayBinding *arrayBinding = cast<UiArrayBinding*>(member))
|
||||||
|
idx = propertyOrder.indexOf(flatten(arrayBinding->qualifiedId));
|
||||||
|
else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(member))
|
||||||
|
idx = propertyOrder.indexOf(flatten(objectBinding->qualifiedId));
|
||||||
|
else if (cast<UiObjectDefinition*>(member))
|
||||||
|
idx = propertyOrder.indexOf(QString::null);
|
||||||
|
else if (UiScriptBinding *scriptBinding = cast<UiScriptBinding*>(member))
|
||||||
|
idx = propertyOrder.indexOf(flatten(scriptBinding->qualifiedId));
|
||||||
|
else if (cast<UiPublicMember*>(member))
|
||||||
|
idx = propertyOrder.indexOf(QLatin1String("property"));
|
||||||
|
|
||||||
|
if (idx > objectDefinitionInsertionPoint)
|
||||||
|
return iter;
|
||||||
|
|
||||||
|
previous = iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
return previous;
|
||||||
|
}
|
||||||
|
|
||||||
UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder)
|
UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder)
|
||||||
{
|
{
|
||||||
if (!members)
|
if (!members)
|
||||||
@@ -298,9 +326,9 @@ UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *m
|
|||||||
if (idx == -1)
|
if (idx == -1)
|
||||||
idx = propertyOrder.size() - 1;
|
idx = propertyOrder.size() - 1;
|
||||||
|
|
||||||
for (; idx >= 0; --idx) {
|
for (; idx > 0; --idx) {
|
||||||
const QString prop = propertyOrder.at(idx);
|
const QString prop = propertyOrder.at(idx - 1);
|
||||||
UiObjectMemberList *candidate = orderedMembers[prop];
|
UiObjectMemberList *candidate = orderedMembers.value(prop, 0);
|
||||||
if (candidate != 0)
|
if (candidate != 0)
|
||||||
return candidate;
|
return candidate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ protected:
|
|||||||
bool includeSurroundingWhitespace(int &start, int &end) const;
|
bool includeSurroundingWhitespace(int &start, int &end) const;
|
||||||
void includeLeadingEmptyLine(int &start) const;
|
void includeLeadingEmptyLine(int &start) const;
|
||||||
|
|
||||||
|
static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QStringList &propertyOrder);
|
||||||
static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder);
|
static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user