[gobject-introspection] scanner: Don't try to copy c:type if we're parsing (element-type)



commit cef390f65ffe9e51b103fcb29ee177882f762a0e
Author: Colin Walters <walters verbum org>
Date:   Mon Aug 29 22:17:02 2011 -0400

    scanner: Don't try to copy c:type if we're parsing (element-type)
    
    Commit 81abc2eb63317003a11d1484e84698a37e8ec035 tries harder to keep
    the c:type if it was overriden by a (type) annotation.  However, the
    _resolve() function was also called for (element-type), which had
    undesirable effects - we'd copy the container c:type to the element
    type.
    
    Fix this by splitting out the c:type preservation to only happen when
    processing toplevel types.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=656931

 giscanner/maintransformer.py              |   15 ++++--
 tests/scanner/Annotation-1.0-expected.gir |   20 ++++----
 tests/scanner/Foo-1.0-expected.gir        |    2 +-
 tests/scanner/Regress-1.0-expected.gir    |   82 ++++++++++++++--------------
 4 files changed, 62 insertions(+), 57 deletions(-)
---
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 3eba1e7..29d9229 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -300,6 +300,11 @@ usage is void (*_gtk_reserved1)(void);"""
                 text = type_str
             message.warn_node(parent, "%s: Unknown type: %r" %
                               (text, result.ctype), positions=position)
+        return result
+
+    def _resolve_toplevel(self, type_str, type_node=None, node=None, parent=None):
+        """Like _resolve(), but attempt to preserve more attributes of original type."""
+        result = self._resolve(type_str, type_node=type_node, node=node, parent=parent)
         # If we replace a node with a new type (such as an annotated) we
         # might lose the ctype from the original node.
         if type_node is not None:
@@ -525,8 +530,8 @@ usage is void (*_gtk_reserved1)(void);"""
 
         param_type = options.get(OPT_TYPE)
         if param_type:
-            node.type = self._resolve(param_type.one(),
-                                      node.type, node, parent)
+            node.type = self._resolve_toplevel(param_type.one(),
+                                               node.type, node, parent)
 
         caller_allocates = False
         annotated_direction = None
@@ -753,7 +758,7 @@ usage is void (*_gtk_reserved1)(void);"""
             prop.transfer = self._get_transfer_default(parent, prop)
         type_tag = block.get(TAG_TYPE)
         if type_tag:
-            prop.type = self._resolve(type_tag.value, prop.type, prop, parent)
+            prop.type = self._resolve_toplevel(type_tag.value, prop.type, prop, parent)
 
     def _apply_annotations_signal(self, parent, signal):
         prefix = self._get_annotation_name(parent)
@@ -776,8 +781,8 @@ usage is void (*_gtk_reserved1)(void);"""
                 options = getattr(tag, 'options', {})
                 param_type = options.get(OPT_TYPE)
                 if param_type:
-                    param.type = self._resolve(param_type.one(), param.type,
-                                               param, parent)
+                    param.type = self._resolve_toplevel(param_type.one(), param.type,
+                                                        param, parent)
             else:
                 tag = None
             self._apply_annotations_param(signal, param, tag)
diff --git a/tests/scanner/Annotation-1.0-expected.gir b/tests/scanner/Annotation-1.0-expected.gir
index 10f5e74..eae5b7c 100644
--- a/tests/scanner/Annotation-1.0-expected.gir
+++ b/tests/scanner/Annotation-1.0-expected.gir
@@ -54,14 +54,14 @@ and/or use gtk-doc annotations.  -->
       <return-value transfer-ownership="container">
         <doc xml:whitespace="preserve">list of strings</doc>
         <type name="GLib.List" c:type="GList*">
-          <type name="utf8" c:type="GList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <doc xml:whitespace="preserve">list of strings</doc>
           <type name="GLib.List" c:type="GList*">
-            <type name="utf8" c:type="GList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -238,8 +238,8 @@ objects.</doc>
         <return-value transfer-ownership="full">
           <doc xml:whitespace="preserve">hash table</doc>
           <type name="GLib.HashTable" c:type="GHashTable*">
-            <type name="utf8" c:type="GHashTable*"/>
-            <type name="GObject.Object" c:type="GHashTable*"/>
+            <type name="utf8"/>
+            <type name="GObject.Object"/>
           </type>
         </return-value>
       </method>
@@ -250,7 +250,7 @@ intentionally similar example to gtk_container_get_children</doc>
         <return-value transfer-ownership="container">
           <doc xml:whitespace="preserve">list of objects</doc>
           <type name="GLib.SList" c:type="GSList*">
-            <type name="Object" c:type="GSList*"/>
+            <type name="Object"/>
           </type>
         </return-value>
       </method>
@@ -260,7 +260,7 @@ each string needs to be freed.</doc>
         <return-value transfer-ownership="full">
           <doc xml:whitespace="preserve">list of strings</doc>
           <type name="GLib.List" c:type="GList*">
-            <type name="utf8" c:type="GList*"/>
+            <type name="utf8"/>
           </type>
         </return-value>
       </method>
@@ -410,7 +410,7 @@ each string needs to be freed.</doc>
           <parameter name="data" transfer-ownership="none">
             <doc xml:whitespace="preserve">The data</doc>
             <array length="1" zero-terminated="0" c:type="gchar*">
-              <type name="gint8" c:type="gchar*"/>
+              <type name="gint8"/>
             </array>
           </parameter>
           <parameter name="length" transfer-ownership="none">
@@ -429,7 +429,7 @@ type.</doc>
           <parameter name="data" transfer-ownership="none">
             <doc xml:whitespace="preserve">The data</doc>
             <array length="1" zero-terminated="0" c:type="gpointer">
-              <type name="guint8" c:type="gpointer"/>
+              <type name="guint8"/>
             </array>
           </parameter>
           <parameter name="length" transfer-ownership="none">
@@ -725,7 +725,7 @@ detection, and fixing it via annotations.</doc>
         <parameter name="array" transfer-ownership="none">
           <doc xml:whitespace="preserve">the array</doc>
           <array name="GLib.PtrArray" c:type="GPtrArray*">
-            <type name="GLib.Value" c:type="GPtrArray*"/>
+            <type name="GLib.Value"/>
           </array>
         </parameter>
       </parameters>
@@ -782,7 +782,7 @@ detection, and fixing it via annotations.</doc>
         </parameter>
         <parameter name="properties" transfer-ownership="none">
           <array length="0" zero-terminated="0" c:type="gchar*">
-            <type name="utf8" c:type="gchar*"/>
+            <type name="utf8"/>
           </array>
         </parameter>
       </parameters>
diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir
index ffcf216..371250f 100644
--- a/tests/scanner/Foo-1.0-expected.gir
+++ b/tests/scanner/Foo-1.0-expected.gir
@@ -1117,7 +1117,7 @@ exposed to language bindings.</doc>
     <function name="test_array" c:identifier="foo_test_array">
       <return-value transfer-ownership="container">
         <array name="GLib.Array" c:type="GArray*">
-          <type name="utf8" c:type="GArray*"/>
+          <type name="utf8"/>
         </array>
       </return-value>
     </function>
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 156acc9..2f4b5c2 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -1145,7 +1145,7 @@ TpAccount::status-changed</doc>
       </field>
       <field name="array2" writable="1">
         <array c:type="gpointer*">
-          <type name="TestObj" c:type="gpointer*"/>
+          <type name="TestObj"/>
         </array>
       </field>
       <field name="field" writable="1">
@@ -1153,12 +1153,12 @@ TpAccount::status-changed</doc>
       </field>
       <field name="list" writable="1">
         <type name="GLib.List" c:type="GList*">
-          <type name="TestObj" c:type="GList*"/>
+          <type name="TestObj"/>
         </type>
       </field>
       <field name="garray" writable="1">
         <array name="GLib.PtrArray" c:type="GPtrArray*">
-          <type name="TestObj" c:type="GPtrArray*"/>
+          <type name="TestObj"/>
         </array>
       </field>
     </record>
@@ -1914,7 +1914,7 @@ call and can be released on return.</doc>
       <return-value transfer-ownership="full">
         <doc xml:whitespace="preserve">list of strings</doc>
         <type name="GLib.SList" c:type="GSList*">
-          <type name="filename" c:type="GSList*"/>
+          <type name="filename"/>
         </type>
       </return-value>
     </function>
@@ -1932,7 +1932,7 @@ call and can be released on return.</doc>
               c:identifier="regress_test_garray_container_return">
       <return-value transfer-ownership="container">
         <array name="GLib.PtrArray" c:type="GPtrArray*">
-          <type name="utf8" c:type="GPtrArray*"/>
+          <type name="utf8"/>
         </array>
       </return-value>
     </function>
@@ -1940,8 +1940,8 @@ call and can be released on return.</doc>
               c:identifier="regress_test_ghash_container_return">
       <return-value transfer-ownership="container">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="utf8" c:type="GHashTable*"/>
+          <type name="utf8"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -1949,8 +1949,8 @@ call and can be released on return.</doc>
               c:identifier="regress_test_ghash_everything_return">
       <return-value transfer-ownership="full">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="utf8" c:type="GHashTable*"/>
+          <type name="utf8"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -1973,8 +1973,8 @@ call and can be released on return.</doc>
 element-type annotation.</doc>
       <return-value transfer-ownership="full">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="GLib.HashTable" c:type="GHashTable*">
+          <type name="utf8"/>
+          <type name="GLib.HashTable">
             <type name="utf8"/>
             <type name="utf8"/>
           </type>
@@ -1989,8 +1989,8 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.HashTable" c:type="GHashTable*">
-            <type name="utf8" c:type="GHashTable*"/>
-            <type name="utf8" c:type="GHashTable*"/>
+            <type name="utf8"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2003,8 +2003,8 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.HashTable" c:type="GHashTable*">
-            <type name="utf8" c:type="GHashTable*"/>
-            <type name="utf8" c:type="GHashTable*"/>
+            <type name="utf8"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2013,8 +2013,8 @@ element-type annotation.</doc>
               c:identifier="regress_test_ghash_nothing_return">
       <return-value transfer-ownership="none">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="utf8" c:type="GHashTable*"/>
+          <type name="utf8"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2022,8 +2022,8 @@ element-type annotation.</doc>
               c:identifier="regress_test_ghash_nothing_return2">
       <return-value transfer-ownership="none">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="utf8" c:type="GHashTable*"/>
+          <type name="utf8"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2035,8 +2035,8 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none" allow-none="1">
           <type name="GLib.HashTable" c:type="GHashTable*">
-            <type name="utf8" c:type="GHashTable*"/>
-            <type name="utf8" c:type="GHashTable*"/>
+            <type name="utf8"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2053,8 +2053,8 @@ element-type annotation.</doc>
                    transfer-ownership="full"
                    allow-none="1">
           <type name="GLib.HashTable" c:type="GHashTable**">
-            <type name="utf8" c:type="GHashTable**"/>
-            <type name="utf8" c:type="GHashTable**"/>
+            <type name="utf8"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2063,8 +2063,8 @@ element-type annotation.</doc>
               c:identifier="regress_test_ghash_null_return">
       <return-value transfer-ownership="none">
         <type name="GLib.HashTable" c:type="GHashTable*">
-          <type name="utf8" c:type="GHashTable*"/>
-          <type name="utf8" c:type="GHashTable*"/>
+          <type name="utf8"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2072,7 +2072,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_glist_container_return">
       <return-value transfer-ownership="container">
         <type name="GLib.List" c:type="GList*">
-          <type name="utf8" c:type="GList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2080,7 +2080,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_glist_everything_return">
       <return-value transfer-ownership="full">
         <type name="GLib.List" c:type="GList*">
-          <type name="utf8" c:type="GList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2092,7 +2092,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.List" c:type="GList*">
-            <type name="utf8" c:type="GList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2105,7 +2105,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.List" c:type="GList*">
-            <type name="utf8" c:type="GList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2114,7 +2114,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_glist_nothing_return">
       <return-value transfer-ownership="none">
         <type name="GLib.List" c:type="GList*">
-          <type name="utf8" c:type="GList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2122,7 +2122,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_glist_nothing_return2">
       <return-value transfer-ownership="none">
         <type name="GLib.List" c:type="GList*">
-          <type name="utf8" c:type="GList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2134,7 +2134,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none" allow-none="1">
           <type name="GLib.SList" c:type="GSList*">
-            <type name="utf8" c:type="GSList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2151,7 +2151,7 @@ element-type annotation.</doc>
                    transfer-ownership="full"
                    allow-none="1">
           <type name="GLib.SList" c:type="GSList**">
-            <type name="utf8" c:type="GSList**"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2160,7 +2160,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_gslist_container_return">
       <return-value transfer-ownership="container">
         <type name="GLib.SList" c:type="GSList*">
-          <type name="utf8" c:type="GSList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2168,7 +2168,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_gslist_everything_return">
       <return-value transfer-ownership="full">
         <type name="GLib.SList" c:type="GSList*">
-          <type name="utf8" c:type="GSList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2180,7 +2180,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.SList" c:type="GSList*">
-            <type name="utf8" c:type="GSList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2193,7 +2193,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none">
           <type name="GLib.SList" c:type="GSList*">
-            <type name="utf8" c:type="GSList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2202,7 +2202,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_gslist_nothing_return">
       <return-value transfer-ownership="none">
         <type name="GLib.SList" c:type="GSList*">
-          <type name="utf8" c:type="GSList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2210,7 +2210,7 @@ element-type annotation.</doc>
               c:identifier="regress_test_gslist_nothing_return2">
       <return-value transfer-ownership="none">
         <type name="GLib.SList" c:type="GSList*">
-          <type name="utf8" c:type="GSList*"/>
+          <type name="utf8"/>
         </type>
       </return-value>
     </function>
@@ -2222,7 +2222,7 @@ element-type annotation.</doc>
       <parameters>
         <parameter name="in" transfer-ownership="none" allow-none="1">
           <type name="GLib.SList" c:type="GSList*">
-            <type name="utf8" c:type="GSList*"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>
@@ -2239,7 +2239,7 @@ element-type annotation.</doc>
                    transfer-ownership="full"
                    allow-none="1">
           <type name="GLib.SList" c:type="GSList**">
-            <type name="utf8" c:type="GSList**"/>
+            <type name="utf8"/>
           </type>
         </parameter>
       </parameters>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]