From 2e949c70157d6c7a210d1c8c41e3d2e057a4f93b Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Wed, 21 Jul 2010 13:49:14 +0200 Subject: [PATCH] QmlJS Rewriter: Remove empty grouped properties Also remove grouped properties if the last member is removed via removeObjectMember (removeBindingByName already takes care of this). --- src/libs/qmljs/qmljsrewriter.cpp | 20 ++++++++++++++++++++ src/libs/qmljs/qmljsrewriter.h | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljsrewriter.cpp b/src/libs/qmljs/qmljsrewriter.cpp index 61d56a2e069..a6601fb33de 100644 --- a/src/libs/qmljs/qmljsrewriter.cpp +++ b/src/libs/qmljs/qmljsrewriter.cpp @@ -490,6 +490,23 @@ void Rewriter::includeLeadingEmptyLine(const QString &source, int &start) start = prevBlock.position(); } +void Rewriter::includeEmptyGroupedProperty(UiObjectDefinition *groupedProperty, UiObjectMember *memberToBeRemoved, int &start, int &end) +{ + if (groupedProperty->qualifiedTypeNameId + && groupedProperty->qualifiedTypeNameId->name->asString().at(0).isLower()) { + // grouped property + UiObjectMemberList *memberIter = groupedProperty->initializer->members; + while (memberIter) { + if (memberIter->member != memberToBeRemoved) { + return; + } + memberIter = memberIter->next; + } + start = groupedProperty->firstSourceLocation().begin(); + end = groupedProperty->lastSourceLocation().end(); + } +} + #if 0 UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QStringList &propertyOrder) { @@ -610,6 +627,9 @@ void Rewriter::removeObjectMember(UiObjectMember *member, UiObjectMember *parent if (UiArrayBinding *parentArray = cast<UiArrayBinding *>(parent)) { extendToLeadingOrTrailingComma(parentArray, member, start, end); } else { + if (UiObjectDefinition *parentObjectDefinition = cast<UiObjectDefinition *>(parent)) { + includeEmptyGroupedProperty(parentObjectDefinition, member, start, end); + } includeSurroundingWhitespace(m_originalText, start, end); } diff --git a/src/libs/qmljs/qmljsrewriter.h b/src/libs/qmljs/qmljsrewriter.h index 318a74ecc13..6d03f24e56e 100644 --- a/src/libs/qmljs/qmljsrewriter.h +++ b/src/libs/qmljs/qmljsrewriter.h @@ -78,7 +78,6 @@ public: Range addObject(AST::UiObjectInitializer *ast, const QString &content); Range addObject(AST::UiObjectInitializer *ast, const QString &content, AST::UiObjectMemberList *insertAfter); - void removeObjectMember(AST::UiObjectMember *member, AST::UiObjectMember *parent); static AST::UiObjectMemberList *searchMemberToInsertAfter(AST::UiObjectMemberList *members, const QStringList &propertyOrder); @@ -87,6 +86,7 @@ public: static bool includeSurroundingWhitespace(const QString &source, int &start, int &end); static void includeLeadingEmptyLine(const QString &source, int &start); + static void includeEmptyGroupedProperty(AST::UiObjectDefinition *groupedProperty, AST::UiObjectMember *memberToBeRemoved, int &start, int &end); private: void replaceMemberValue(AST::UiObjectMember *propertyMember, -- GitLab