diff options
author | Philip Withnall <philip.withnall@collabora.co.uk> | 2014-05-06 17:51:24 +0100 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2015-10-04 17:41:57 -0400 |
commit | 0a134a608f5b471c3a12739785e149ceaf90df27 (patch) | |
tree | 0474102c6cf23d023eb32e461c48d396051df80d | |
parent | 09c466f0184e74ba6f279f103ad3be3a7e1f2a06 (diff) | |
download | gobject-introspection-0a134a608f5b471c3a12739785e149ceaf90df27.tar.gz |
giscanner: Mark (closure) parameters as (nullable) by convention
All user_data pointers should be nullable, and they should all be
annotated as closures too. I have not found any counter-examples where a
closure is non-nullable.
https://bugzilla.gnome.org/show_bug.cgi?id=729660
-rw-r--r-- | giscanner/maintransformer.py | 7 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 102 | ||||
-rw-r--r-- | tests/scanner/Utility-1.0-expected.gir | 18 |
3 files changed, 107 insertions, 20 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index bb79a5b3..8bac1430 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -1438,6 +1438,13 @@ method or constructor of some type.""" param.argname is not None and param.argname.endswith('data')): callback_param.closure_name = param.argname + param.closure_name = param.argname + + for param in params: + # By convention, closure user_data parameters are always nullable. + if param.closure_name is not None and \ + param.closure_name == param.argname: + param.nullable = True def _pass3_callable_throws(self, node): """Check to see if we have anything that looks like a diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 55586c4f..b856867f 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -136,7 +136,11 @@ and/or use gtk-doc annotations. --> <parameter name="item" transfer-ownership="none"> <type name="utf8" c:type="const char*"/> </parameter> - <parameter name="user_data" transfer-ownership="none" closure="2"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -166,7 +170,11 @@ and/or use gtk-doc annotations. --> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="data" transfer-ownership="none" closure="0"> + <parameter name="data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="0"> <doc xml:space="preserve">The user data</doc> <type name="gpointer" c:type="gpointer"/> </parameter> @@ -376,7 +384,11 @@ are zero-terminated</doc> <type name="AnnotationForeachFunc" c:type="RegressAnnotationForeachFunc"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <doc xml:space="preserve">Callback user data</doc> <type name="gpointer" c:type="gpointer"/> </parameter> @@ -724,7 +736,11 @@ regress_annotation_object_watch_full().</doc> <type name="AnnotationForeachFunc" c:type="RegressAnnotationForeachFunc"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <doc xml:space="preserve">The callback data</doc> <type name="gpointer" c:type="gpointer"/> </parameter> @@ -751,7 +767,11 @@ regress_annotation_object_watch_full().</doc> <type name="AnnotationForeachFunc" c:type="RegressAnnotationForeachFunc"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <doc xml:space="preserve">The callback data</doc> <type name="gpointer" c:type="gpointer"/> </parameter> @@ -1797,7 +1817,11 @@ exposed to language bindings.</doc> closure="1"> <type name="GObject.Callback" c:type="GCallback"/> </parameter> - <parameter name="user_data" transfer-ownership="none" closure="1"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -1826,7 +1850,11 @@ exposed to language bindings.</doc> closure="1"> <type name="GObject.Callback" c:type="GCallback"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -1882,7 +1910,11 @@ exposed to language bindings.</doc> closure="2"> <type name="GObject.Callback" c:type="GCallback"/> </parameter> - <parameter name="user_data" transfer-ownership="none" closure="2"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -2402,7 +2434,11 @@ use it should be.</doc> <type name="gint" c:type="int"/> </return-value> <parameters> - <parameter name="user_data" transfer-ownership="none" closure="0"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="0"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -2873,7 +2909,11 @@ use it should be.</doc> <type name="TestCallbackUserData" c:type="RegressTestCallbackUserData"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> <parameter name="notify" transfer-ownership="none" scope="async"> @@ -4251,7 +4291,11 @@ detection, and fixing it via annotations.</doc> <type name="AnnotationNotifyFunc" c:type="RegressAnnotationNotifyFunc"/> </parameter> - <parameter name="data" transfer-ownership="none"> + <parameter name="data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -4445,7 +4489,11 @@ detection, and fixing it via annotations.</doc> closure="2"> <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -4463,7 +4511,11 @@ detection, and fixing it via annotations.</doc> destroy="2"> <type name="FooCallback" c:type="RegressFooCallback"/> </parameter> - <parameter name="data" transfer-ownership="none"> + <parameter name="data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> <parameter name="destroy" transfer-ownership="none" scope="async"> @@ -5334,7 +5386,11 @@ libgnome-keyring.</doc> <type name="TestCallbackUserData" c:type="RegressTestCallbackUserData"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -5355,7 +5411,11 @@ is invoked.</doc> <type name="TestCallbackUserData" c:type="RegressTestCallbackUserData"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> <parameter name="notify" transfer-ownership="none" scope="async"> @@ -5426,7 +5486,11 @@ call and can be released on return.</doc> <type name="TestCallbackUserData" c:type="RegressTestCallbackUserData"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -6435,7 +6499,11 @@ https://bugzilla.gnome.org/show_bug.cgi?id=685399</doc> <type name="TestCallbackUserData" c:type="RegressTestCallbackUserData"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> <parameter name="notify" transfer-ownership="none" scope="async"> diff --git a/tests/scanner/Utility-1.0-expected.gir b/tests/scanner/Utility-1.0-expected.gir index 0bd38297..38b6a3cb 100644 --- a/tests/scanner/Utility-1.0-expected.gir +++ b/tests/scanner/Utility-1.0-expected.gir @@ -55,7 +55,11 @@ and/or use gtk-doc annotations. --> <parameter name="path" transfer-ownership="none"> <type name="utf8" c:type="const char*"/> </parameter> - <parameter name="user_data" transfer-ownership="none" closure="1"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="1"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> @@ -93,7 +97,11 @@ and/or use gtk-doc annotations. --> destroy="3"> <type name="FileFunc" c:type="UtilityFileFunc"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> <parameter name="destroy" transfer-ownership="none" scope="async"> @@ -169,7 +177,11 @@ and/or use gtk-doc annotations. --> closure="2"> <type name="FileFunc" c:type="UtilityFileFunc"/> </parameter> - <parameter name="user_data" transfer-ownership="none"> + <parameter name="user_data" + transfer-ownership="none" + nullable="1" + allow-none="1" + closure="2"> <type name="gpointer" c:type="gpointer"/> </parameter> </parameters> |