vala r2220 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2220 - in trunk: . gobject
- Date: Fri, 19 Dec 2008 13:42:38 +0000 (UTC)
Author: juergbi
Date: Fri Dec 19 13:42:38 2008
New Revision: 2220
URL: http://svn.gnome.org/viewvc/vala?rev=2220&view=rev
Log:
2008-12-19 JÃrg Billeter <j bitron ch>
* gobject/valadbusservermodule.vala:
Do not generate property code if not necessary
Modified:
trunk/ChangeLog
trunk/gobject/valadbusservermodule.vala
Modified: trunk/gobject/valadbusservermodule.vala
==============================================================================
--- trunk/gobject/valadbusservermodule.vala (original)
+++ trunk/gobject/valadbusservermodule.vala Fri Dec 19 13:42:38 2008
@@ -567,6 +567,20 @@
string generate_dbus_property_get_all_wrapper (ObjectTypeSymbol sym, string dbus_iface_name) {
string wrapper_name = "_dbus_%s_property_get_all".printf (sym.get_lower_case_cname ());
+ bool has_readable_properties = false;
+ foreach (Property prop in sym.get_properties ()) {
+ if (prop.binding != MemberBinding.INSTANCE
+ || prop.overrides || prop.access != SymbolAccessibility.PUBLIC) {
+ continue;
+ }
+ if (!is_dbus_visible (prop)) {
+ continue;
+ }
+ if (prop.get_accessor != null) {
+ has_readable_properties = true;
+ }
+ }
+
CCodeDeclaration cdecl;
var function = new CCodeFunction (wrapper_name, "DBusMessage*");
@@ -587,8 +601,10 @@
cdecl.add_declarator (new CCodeVariableDeclarator ("iter"));
cdecl.add_declarator (new CCodeVariableDeclarator ("reply_iter"));
cdecl.add_declarator (new CCodeVariableDeclarator ("subiter"));
- cdecl.add_declarator (new CCodeVariableDeclarator ("entry_iter"));
- cdecl.add_declarator (new CCodeVariableDeclarator ("value_iter"));
+ if (has_readable_properties) {
+ cdecl.add_declarator (new CCodeVariableDeclarator ("entry_iter"));
+ cdecl.add_declarator (new CCodeVariableDeclarator ("value_iter"));
+ }
block.add_statement (cdecl);
var message_signature = new CCodeFunctionCall (new CCodeIdentifier ("dbus_message_get_signature"));
@@ -623,9 +639,11 @@
var expr = read_expression (prefragment, string_type, new CCodeIdentifier ("iter"), target);
prefragment.append (new CCodeExpressionStatement (new CCodeAssignment (target, expr)));
- cdecl = new CCodeDeclaration ("const char*");
- cdecl.add_declarator (new CCodeVariableDeclarator ("property_name"));
- prefragment.append (cdecl);
+ if (has_readable_properties) {
+ cdecl = new CCodeDeclaration ("const char*");
+ cdecl.add_declarator (new CCodeVariableDeclarator ("property_name"));
+ prefragment.append (cdecl);
+ }
var prop_block = new CCodeBlock ();
@@ -1110,8 +1128,30 @@
if (dbus != null) {
string dbus_iface_name = dbus.get_string ("name");
if (dbus_iface_name != null) {
- handle_method ("org.freedesktop.DBus.Properties", "Get", generate_dbus_property_get_wrapper (sym, dbus_iface_name), block, ref clastif);
- handle_method ("org.freedesktop.DBus.Properties", "Set", generate_dbus_property_set_wrapper (sym, dbus_iface_name), block, ref clastif);
+ bool need_property_get = false;
+ bool need_property_set = false;
+ foreach (Property prop in sym.get_properties ()) {
+ if (prop.binding != MemberBinding.INSTANCE
+ || prop.overrides || prop.access != SymbolAccessibility.PUBLIC) {
+ continue;
+ }
+ if (!is_dbus_visible (prop)) {
+ continue;
+ }
+ if (prop.get_accessor != null) {
+ need_property_get = true;
+ }
+ if (prop.set_accessor != null) {
+ need_property_set = true;
+ }
+ }
+
+ if (need_property_get) {
+ handle_method ("org.freedesktop.DBus.Properties", "Get", generate_dbus_property_get_wrapper (sym, dbus_iface_name), block, ref clastif);
+ }
+ if (need_property_set) {
+ handle_method ("org.freedesktop.DBus.Properties", "Set", generate_dbus_property_set_wrapper (sym, dbus_iface_name), block, ref clastif);
+ }
handle_method ("org.freedesktop.DBus.Properties", "GetAll", generate_dbus_property_get_all_wrapper (sym, dbus_iface_name), block, ref clastif);
handle_methods (sym, dbus_iface_name, block, ref clastif);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]