gobject-introspection r1087 - in trunk: giscanner tests/scanner



Author: walters
Date: Thu Feb  5 22:43:39 2009
New Revision: 1087
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=1087&view=rev

Log:
Bug 561360 - If we can't resolve parent class, use GObject

This enables us to support "hidden" parent classes.

Modified:
   trunk/giscanner/glibtransformer.py
   trunk/tests/scanner/foo-1.0-expected.gir
   trunk/tests/scanner/foo-1.0-expected.tgir
   trunk/tests/scanner/foo.c
   trunk/tests/scanner/foo.h

Modified: trunk/giscanner/glibtransformer.py
==============================================================================
--- trunk/giscanner/glibtransformer.py	(original)
+++ trunk/giscanner/glibtransformer.py	Thu Feb  5 22:43:39 2009
@@ -802,7 +802,17 @@
              for x in node.prerequisites])
 
     def _resolve_glib_object(self, node):
-        node.parent = self._force_resolve(node.parent)
+        # If we can't find the parent class, just drop back to GObject.
+        # This supports hidden parent classes.
+        # http://bugzilla.gnome.org/show_bug.cgi?id=561360
+        try:
+            node.parent = self._force_resolve(node.parent)
+        except KeyError, e:
+            print ("WARNING: Parent %r of class %r" +\
+                   " not found; using GObject") % (node.parent.target,
+                                                   node.name)
+            node.parent = self._transformer.gtypename_to_giname("GObject",
+                                                                self._names)
         node.interfaces = filter(None,
             [self._force_resolve(x, allow_unknown=True)
                                     for x in node.interfaces])

Modified: trunk/tests/scanner/foo-1.0-expected.gir
==============================================================================
--- trunk/tests/scanner/foo-1.0-expected.gir	(original)
+++ trunk/tests/scanner/foo-1.0-expected.gir	Thu Feb  5 22:43:39 2009
@@ -239,6 +239,20 @@
         <type name="ObjectClass" c:type="FooObjectClass"/>
       </field>
     </record>
+    <class name="Buffer"
+           c:type="FooBuffer"
+           parent="GObject.Object"
+           glib:type-name="FooBuffer"
+           glib:get-type="foo_buffer_get_type">
+      <implements name="Interface"/>
+      <method name="some_method" c:identifier="foo_buffer_some_method">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+      </method>
+    </class>
+    <record name="BufferClass" c:type="FooBufferClass">
+    </record>
     <function name="init" c:identifier="foo_init">
       <return-value transfer-ownership="none">
         <type name="int" c:type="gint"/>

Modified: trunk/tests/scanner/foo-1.0-expected.tgir
==============================================================================
--- trunk/tests/scanner/foo-1.0-expected.tgir	(original)
+++ trunk/tests/scanner/foo-1.0-expected.tgir	Thu Feb  5 22:43:39 2009
@@ -152,6 +152,15 @@
         <type name="ObjectClass"/>
       </field>
     </record>
+    <class name="Buffer" parent="GObject.Object" glib:type-name="FooBuffer" glib:get-type="foo_buffer_get_type">
+      <implements name="Interface"/>
+      <method name="some_method" c:identifier="foo_buffer_some_method">
+        <return-value transfer-ownership="none">
+          <type name="none"/>
+        </return-value>
+      </method>
+    </class>
+    <record name="BufferClass"/>
     <function name="init" c:identifier="foo_init">
       <return-value transfer-ownership="none">
         <type name="int"/>

Modified: trunk/tests/scanner/foo.c
==============================================================================
--- trunk/tests/scanner/foo.c	(original)
+++ trunk/tests/scanner/foo.c	Thu Feb  5 22:43:39 2009
@@ -420,7 +420,6 @@
   g_slice_free (FooHidden, boxed);
 }
 
-
 GType
 foo_hidden_get_type (void)
 {
@@ -458,5 +457,68 @@
 void
 foo_some_variant (guint x, va_list args)
 {
-  
+}
+
+/* This setup of a totally hidden parent class matches
+ * http://bugzilla.gnome.org/show_bug.cgi?id=561360
+ */
+#define FOO_TYPE_TILE_HANDLER        (foo_tile_handler_get_type ())
+#define FOO_TILE_HANDLER(object)     (G_TYPE_CHECK_INSTANCE_CAST ((object), FOO_TYPE_TILE_HANDLER, FooTileHandler))
+#define FOO_IS_TILE_HANDLER(object)  (G_TYPE_CHECK_INSTANCE_TYPE ((object), FOO_TYPE_TILE_HANDLER))
+
+struct _FooTileHandler
+{
+  FooObject parent_instance;
+};
+
+
+struct _FooTileHandlerClass
+{
+  FooObjectClass parent_class;
+};
+
+typedef struct _FooTileHandler          FooTileHandler;
+typedef struct _FooTileHandlerClass     FooTileHandlerClass;
+
+G_DEFINE_TYPE(FooTileHandler, foo_tile_handler, FOO_TYPE_OBJECT);
+
+static void
+foo_tile_handler_class_init (FooTileHandlerClass *klass)
+{
+
+}
+
+static void
+foo_tile_handler_init (FooTileHandler *object)
+{
+
+}
+
+struct _FooBuffer
+{
+  FooTileHandler parent_instance;
+};
+
+struct _FooBufferClass
+{
+  FooTileHandlerClass parent_class;
+};
+
+G_DEFINE_TYPE(FooBuffer, foo_buffer, FOO_TYPE_TILE_HANDLER);
+
+static void
+foo_buffer_class_init (FooBufferClass *klass)
+{
+
+}
+
+static void
+foo_buffer_init (FooBuffer *object)
+{
+
+}
+
+void
+foo_buffer_some_method (FooBuffer *buffer)
+{
 }
\ No newline at end of file

Modified: trunk/tests/scanner/foo.h
==============================================================================
--- trunk/tests/scanner/foo.h	(original)
+++ trunk/tests/scanner/foo.h	Thu Feb  5 22:43:39 2009
@@ -23,6 +23,10 @@
 #define FOO_SUBOBJECT(subobject)     (G_TYPE_CHECK_INSTANCE_CAST ((subobject), FOO_TYPE_SUBOBJECT, FooSubobject))
 #define FOO_IS_SUBOBJECT(subobject)  (G_TYPE_CHECK_INSTANCE_TYPE ((subobject), FOO_TYPE_SUBOBJECT))
 
+#define FOO_TYPE_BUFFER        (foo_buffer_get_type ())
+#define FOO_BUFFER(object)     (G_TYPE_CHECK_INSTANCE_CAST ((object), FOO_TYPE_BUFFER, FooBuffer))
+#define FOO_IS_BUFFER(object)  (G_TYPE_CHECK_INSTANCE_TYPE ((object), FOO_TYPE_BUFFER))
+
 typedef struct _FooInterface       FooInterface;
 typedef struct _FooInterfaceIface  FooInterfaceIface;
 typedef struct _FooSubInterface       FooSubInterface;
@@ -31,6 +35,8 @@
 typedef struct _FooObjectClass     FooObjectClass;
 typedef struct _FooSubobject       FooSubobject;
 typedef struct _FooSubobjectClass  FooSubobjectClass;
+typedef struct _FooBuffer          FooBuffer;
+typedef struct _FooBufferClass     FooBufferClass;
 
 struct _FooInterfaceIface
 {
@@ -108,6 +114,10 @@
 GType                 foo_subobject_get_type       (void) G_GNUC_CONST;
 FooSubobject*         foo_subobject_new            ();
 
+GType                 foo_buffer_get_type          (void);
+
+void                  foo_buffer_some_method       (FooBuffer *buffer);
+
 typedef enum
 {
   FOO_ENUM_ALPHA,



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