[gobject-introspection] scanner: Don't attempt to pair methods/constructors with foreign namespaces



commit 5ee812f5553e0786bf8daeedeb956a9074eedb4c
Author: Colin Walters <walters verbum org>
Date:   Wed Sep 8 09:58:32 2010 -0400

    scanner: Don't attempt to pair methods/constructors with foreign namespaces
    
    See test case, hit in practice in gnome-shell.

 giscanner/maintransformer.py       |    4 ++++
 tests/scanner/Foo-1.0-expected.gir |   11 +++++++++++
 tests/scanner/foo.h                |    4 ++++
 3 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 5493fcd..59f93e2 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -775,6 +775,8 @@ method or constructor of some type."""
                                    ast.Record, ast.Union,
                                    glibast.GLibBoxedOther)):
             return False
+        if target.namespace != self._namespace:
+            return False
 
         # A quick hack here...in the future we should catch C signature/GI signature
         # mismatches in a general way in finaltransformer
@@ -829,6 +831,8 @@ method or constructor of some type."""
         (origin_node, funcname) = split
         if not isinstance(origin_node, (ast.Class, glibast.GLibBoxed)):
             return False
+        if origin_node.namespace != self._namespace:
+            return False
         if isinstance(target, ast.Class):
             parent = origin_node
             while parent and (not parent.create_type().target_giname == 'GObject.Object'):
diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir
index 731b0c0..0c4c2b6 100644
--- a/tests/scanner/Foo-1.0-expected.gir
+++ b/tests/scanner/Foo-1.0-expected.gir
@@ -318,6 +318,17 @@ and/or use gtk-doc annotations.  -->
           <type name="Object" c:type="FooObject*"/>
         </return-value>
       </constructor>
+      <function name="a_global_method"
+                c:identifier="foo_object_a_global_method">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <parameter name="obj" transfer-ownership="none">
+            <type name="Utility.Object" c:type="UtilityObject*"/>
+          </parameter>
+        </parameters>
+      </function>
       <function name="get_default" c:identifier="foo_object_get_default">
         <doc xml:whitespace="preserve">This function is intended to match clutter_stage_get_default which
 uses a C sugar return type.</doc>
diff --git a/tests/scanner/foo.h b/tests/scanner/foo.h
index 2d11ba6..5a67e65 100644
--- a/tests/scanner/foo.h
+++ b/tests/scanner/foo.h
@@ -415,5 +415,9 @@ struct _FooForeignStruct
   int foo;
 };
 
+/* This one should be a global, not a method on UtilityObject since
+ * it's a separate namespace.
+ */
+void foo_object_a_global_method (UtilityObject *obj);
 
 #endif /* __FOO_OBJECT_H__ */



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