From 927b68cf2d05659d911fc1f052a41b0dc7b43ce6 Mon Sep 17 00:00:00 2001
From: Jarek Kobus <jaroslaw.kobus@qt.io>
Date: Thu, 15 Jun 2017 15:00:22 +0200
Subject: [PATCH] Ignore deprecated elements instead of raising an error

Change-Id: I2fb1b9f08e9123e62c1a80780ce6f47dc7d3d25d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
---
 src/designer/data/generate_header.xsl |  8 +++----
 src/designer/data/generate_impl.xsl   | 14 +++++++++----
 src/designer/data/ui4.xsd             |  6 ++++++
 src/designer/src/lib/uilib/ui4.cpp    | 30 +++++++++++++++++++++++++++
 4 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/src/designer/data/generate_header.xsl b/src/designer/data/generate_header.xsl
index 6b27e9e33..ec1ea7aa9 100644
--- a/src/designer/data/generate_header.xsl
+++ b/src/designer/data/generate_header.xsl
@@ -68,7 +68,7 @@
             <xsl:text>    inline Kind kind() const { return m_kind; }&endl;&endl;</xsl:text>
         </xsl:if>
 
-        <xsl:for-each select="$node/xs:element">
+        <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
             <xsl:variable name="array" select="@maxOccurs='unbounded'"/>
             <xsl:variable name="camel-case-name">
                 <xsl:call-template name="camel-case">
@@ -168,7 +168,7 @@
 
         <xsl:variable name="isChoice" select="$node[name()='xs:choice']"/>
 
-        <xsl:for-each select="$node/xs:element">
+        <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
             <xsl:variable name="camel-case-name">
                 <xsl:call-template name="camel-case">
                     <xsl:with-param name="text" select="@name"/>
@@ -210,8 +210,8 @@
 
         <xsl:if test="not($isChoice) and not(@macOccurs='unbounded')">
             <xsl:text>&endl;    enum Child {&endl;</xsl:text>
-            <xsl:for-each select="$node/xs:element">
-            <xsl:variable name="camel-case-name">
+            <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
+                <xsl:variable name="camel-case-name">
                     <xsl:call-template name="camel-case">
                         <xsl:with-param name="text" select="@name"/>
                     </xsl:call-template>
diff --git a/src/designer/data/generate_impl.xsl b/src/designer/data/generate_impl.xsl
index 60922a851..6a538b697 100644
--- a/src/designer/data/generate_impl.xsl
+++ b/src/designer/data/generate_impl.xsl
@@ -54,7 +54,7 @@
     <xsl:template name="dtor-delete-members">
         <xsl:param name="node"/>
 
-        <xsl:for-each select="$node/xs:element">
+        <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
             <xsl:variable name="camel-case-name">
                 <xsl:call-template name="camel-case">
                     <xsl:with-param name="text" select="@name"/>
@@ -259,6 +259,12 @@
             <xsl:text>, Qt::CaseInsensitive)) {&endl;</xsl:text>
 
             <xsl:choose>
+                <xsl:when test="@use='deprecated'">
+                    <xsl:text>                qWarning("Omitting deprecated element &lt;</xsl:text>
+                    <xsl:value-of select="$lower-name"/>
+                    <xsl:text>&gt;.");&endl;</xsl:text>
+                    <xsl:text>                reader.skipCurrentElement();&endl;</xsl:text>
+                </xsl:when>
                 <xsl:when test="not($array) and $xs-type-cat = 'value'">
                     <xsl:variable name="qstring-func">
                         <xsl:call-template name="xs-type-from-qstring-func">
@@ -482,7 +488,7 @@
     <xsl:template name="write-impl-save-sequence-child-element">
         <xsl:param name="node"/>
         <xsl:variable name="name" select="concat('Dom', $node/@name)"/>
-        <xsl:for-each select="$node/xs:element">
+        <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
             <xsl:variable name="camel-case-name">
                 <xsl:call-template name="camel-case">
                     <xsl:with-param name="text" select="@name"/>
@@ -630,7 +636,7 @@
         <xsl:param name="name"/>
         <xsl:variable name="isChoice" select="name($node)='xs:choice'"/>
 
-        <xsl:for-each select="$node/xs:element">
+        <xsl:for-each select="$node/xs:element[not(@use) or (@use!='deprecated')]">
             <xsl:variable name="array" select="@maxOccurs = 'unbounded'"/>
             <xsl:variable name="camel-case-name">
                 <xsl:call-template name="camel-case">
@@ -738,7 +744,7 @@
             <xsl:variable name="isChoice" select="name()='xs:choice'"/>
             <xsl:variable name="make-child-enum" select="boolean(xs:sequence) and not(@maxOccurs='unbounded')"/>
 
-            <xsl:for-each select="xs:element">
+            <xsl:for-each select="xs:element[not(@use) or (@use!='deprecated')]">
                 <xsl:if test="not($isChoice) and not(@maxOccurs='unbounded')">
                     <xsl:variable name="camel-case-name">
                         <xsl:call-template name="camel-case">
diff --git a/src/designer/data/ui4.xsd b/src/designer/data/ui4.xsd
index fe366cea4..d785a3e99 100644
--- a/src/designer/data/ui4.xsd
+++ b/src/designer/data/ui4.xsd
@@ -15,6 +15,7 @@
                         <xs:element name="pixmapfunction" type="xs:string" minOccurs="0" />
                         <xs:element name="customwidgets" type="CustomWidgets" minOccurs="0" />
                         <xs:element name="tabstops" type="TabStops" minOccurs="0" />
+                        <xs:element name="images" use="deprecated" />
                         <xs:element name="includes" type="Includes" minOccurs="0" />
                         <xs:element name="resources" type="Resources" minOccurs="0" />
                         <xs:element name="connections" type="Connections" minOccurs="0" />
@@ -117,7 +118,10 @@
                         <xs:element name="sizehint" type="Size" minOccurs="0" />
                         <xs:element name="addpagemethod" type="xs:string" minOccurs="0" />
                         <xs:element name="container" type="xs:integer" minOccurs="0" />
+                        <xs:element name="sizepolicy" use="deprecated" />
                         <xs:element name="pixmap" type="xs:string" minOccurs="0" />
+                        <xs:element name="script" use="deprecated" />
+                        <xs:element name="properties" use="deprecated" />
                         <xs:element name="slots" type="Slots" minOccurs="0" />
                         <xs:element name="propertyspecifications" type="PropertySpecifications" minOccurs="0" />
                 </xs:all>
@@ -198,6 +202,8 @@
                 <xs:sequence>
                         <xs:element name="class" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> <!-- unbounded kept for compatibility reasons -->
                         <xs:element name="property" type="Property" minOccurs="0" maxOccurs="unbounded" />
+                        <xs:element name="script" use="deprecated" />
+                        <xs:element name="widgetdata" use="deprecated" />
                         <xs:element name="attribute" type="Property" minOccurs="0" maxOccurs="unbounded" />
 <!-- item view begin -->
                         <xs:element name="row" type="Row" minOccurs="0" maxOccurs="unbounded" />
diff --git a/src/designer/src/lib/uilib/ui4.cpp b/src/designer/src/lib/uilib/ui4.cpp
index 3ec4153fb..d0ce3e5d6 100644
--- a/src/designer/src/lib/uilib/ui4.cpp
+++ b/src/designer/src/lib/uilib/ui4.cpp
@@ -148,6 +148,11 @@ void DomUI::read(QXmlStreamReader &reader)
                 setElementTabStops(v);
                 continue;
             }
+            if (!tag.compare(QLatin1String("images"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <images>.");
+                reader.skipCurrentElement();
+                continue;
+            }
             if (!tag.compare(QLatin1String("includes"), Qt::CaseInsensitive)) {
                 DomIncludes *v = new DomIncludes();
                 v->read(reader);
@@ -1248,10 +1253,25 @@ void DomCustomWidget::read(QXmlStreamReader &reader)
                 setElementContainer(reader.readElementText().toInt());
                 continue;
             }
+            if (!tag.compare(QLatin1String("sizepolicy"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <sizepolicy>.");
+                reader.skipCurrentElement();
+                continue;
+            }
             if (!tag.compare(QLatin1String("pixmap"), Qt::CaseInsensitive)) {
                 setElementPixmap(reader.readElementText());
                 continue;
             }
+            if (!tag.compare(QLatin1String("script"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <script>.");
+                reader.skipCurrentElement();
+                continue;
+            }
+            if (!tag.compare(QLatin1String("properties"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <properties>.");
+                reader.skipCurrentElement();
+                continue;
+            }
             if (!tag.compare(QLatin1String("slots"), Qt::CaseInsensitive)) {
                 DomSlots *v = new DomSlots();
                 v->read(reader);
@@ -2123,6 +2143,16 @@ void DomWidget::read(QXmlStreamReader &reader)
                 m_property.append(v);
                 continue;
             }
+            if (!tag.compare(QLatin1String("script"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <script>.");
+                reader.skipCurrentElement();
+                continue;
+            }
+            if (!tag.compare(QLatin1String("widgetdata"), Qt::CaseInsensitive)) {
+                qWarning("Omitting deprecated element <widgetdata>.");
+                reader.skipCurrentElement();
+                continue;
+            }
             if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
                 DomProperty *v = new DomProperty();
                 v->read(reader);
-- 
GitLab