From 0cf0fb463bd66bc4a9671322c262992d3d9f0e6c Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Fri, 19 Mar 2010 12:01:29 +0100
Subject: [PATCH] Changed property insertion into one-liners.

---
 .../core/filemanager/addpropertyvisitor.cpp   | 33 ++++++++++++++++---
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qmldesigner/core/filemanager/addpropertyvisitor.cpp b/src/plugins/qmldesigner/core/filemanager/addpropertyvisitor.cpp
index 98ef915a0ec..91afc7e86d2 100644
--- a/src/plugins/qmldesigner/core/filemanager/addpropertyvisitor.cpp
+++ b/src/plugins/qmldesigner/core/filemanager/addpropertyvisitor.cpp
@@ -105,6 +105,25 @@ void AddPropertyVisitor::addInMembers(QmlJS::AST::UiObjectInitializer *initializ
 
         depth = calculateIndentDepth(endOfPreviousMember);
     }
+    const bool isOneLiner = endOfPreviousMember.startLine == startOfNextMember.startLine;
+    bool needsPreceedingSemicolon = false;
+    bool needsTrailingSemicolon = false;
+
+    if (isOneLiner) {
+        if (insertAfter == 0) { // we're inserting after an lbrace
+            if (insertAfter->next) { // we're inserting before a member (and not the rbrace)
+                needsTrailingSemicolon = true;
+            }
+        } else { // we're inserting after a member, not after the lbrace
+            if (endOfPreviousMember.isValid()) { // there already is a semicolon after the previous member
+                if (insertAfter->next && insertAfter->next->member) { // and the after us there is a member, not an rbrace, so:
+                    needsTrailingSemicolon = true;
+                }
+            } else { // there is no semicolon after the previous member (probably because there is an rbrace after us/it, so:
+                needsPreceedingSemicolon = true;
+            }
+        }
+    }
 
     QString newPropertyTemplate;
     switch (m_propertyType) {
@@ -125,12 +144,18 @@ void AddPropertyVisitor::addInMembers(QmlJS::AST::UiObjectInitializer *initializ
         Q_ASSERT(!"unknown property type");
     }
 
-    const bool isOneLiner = endOfPreviousMember.startLine == startOfNextMember.startLine;
-    if (isOneLiner)
-        newPropertyTemplate += QLatin1Char('\n');
+    if (isOneLiner) {
+        if (needsPreceedingSemicolon)
+            newPropertyTemplate.prepend(QLatin1Char(';'));
+        newPropertyTemplate.prepend(QLatin1Char(' '));
+        if (needsTrailingSemicolon)
+            newPropertyTemplate.append(QLatin1Char(';'));
+    } else {
+        newPropertyTemplate.prepend(QLatin1Char('\n'));
+    }
 
     const QString newPropertyText = addIndentation(newPropertyTemplate.arg(m_name, m_value), depth);
-    replace(endOfPreviousMember.end(), 0, QLatin1Char('\n') + newPropertyText);
+    replace(endOfPreviousMember.end(), 0, newPropertyText);
 
     setDidRewriting(true);
 }
-- 
GitLab