[vala] D-Bus: Move interface info definition from server to common module



commit f73237ac07277a5a80dd3739fb9164cd2bf766d0
Author: Jürg Billeter <j bitron ch>
Date:   Sat Aug 23 17:02:18 2014 +0200

    D-Bus: Move interface info definition from server to common module

 codegen/valagdbusmodule.vala       |  249 ++++++++++++++++++++++++++++++++++++
 codegen/valagdbusservermodule.vala |  228 ---------------------------------
 2 files changed, 249 insertions(+), 228 deletions(-)
---
diff --git a/codegen/valagdbusmodule.vala b/codegen/valagdbusmodule.vala
index acbde07..de203e0 100644
--- a/codegen/valagdbusmodule.vala
+++ b/codegen/valagdbusmodule.vala
@@ -34,10 +34,30 @@ public class Vala.GDBusModule : GVariantModule {
                return Symbol.lower_case_to_camel_case (symbol.name);
        }
 
+       public static bool is_dbus_visible (CodeNode node) {
+               var dbus_attribute = node.get_attribute ("DBus");
+               if (dbus_attribute != null
+                   && dbus_attribute.has_argument ("visible")
+                   && !dbus_attribute.get_bool ("visible")) {
+                       return false;
+               }
+
+               return true;
+       }
+
        public static bool is_dbus_no_reply (Method m) {
                return m.get_attribute_bool ("DBus", "no_reply");
        }
 
+       public static string dbus_result_name (Method m) {
+               var dbus_name = m.get_attribute_string ("DBus", "result");
+               if (dbus_name != null && dbus_name != "") {
+                       return dbus_name;
+               }
+
+               return "result";
+       }
+
        public override void visit_error_domain (ErrorDomain edomain) {
                var edomain_dbus_name = get_dbus_name (edomain);
                if (edomain_dbus_name == null) {
@@ -215,4 +235,233 @@ public class Vala.GDBusModule : GVariantModule {
                        read_expression (type, iter_expr, target_expr, sym, error_expr, out may_fail);
                }
        }
+       CCodeExpression get_method_info (ObjectTypeSymbol sym) {
+               var infos = new CCodeInitializerList ();
+
+               foreach (Method m in sym.get_methods ()) {
+                       if (m is CreationMethod || m.binding != MemberBinding.INSTANCE
+                           || m.overrides || m.access != SymbolAccessibility.PUBLIC) {
+                               continue;
+                       }
+                       if (!is_dbus_visible (m)) {
+                               continue;
+                       }
+
+                       var in_args_info = new CCodeInitializerList ();
+                       var out_args_info = new CCodeInitializerList ();
+
+                       foreach (Parameter param in m.get_parameters ()) {
+                               if (param.variable_type is ObjectType && 
param.variable_type.data_type.get_full_name () == "GLib.Cancellable") {
+                                       continue;
+                               }
+                               if (param.variable_type is ObjectType && 
param.variable_type.data_type.get_full_name () == "GLib.BusName") {
+                                       continue;
+                               }
+
+                               var info = new CCodeInitializerList ();
+                               info.append (new CCodeConstant ("-1"));
+                               info.append (new CCodeConstant ("\"%s\"".printf (param.name)));
+                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(param.variable_type, param))));
+
+                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
+                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + m.name + "_" + param.name, info));
+                               cdecl.modifiers = CCodeModifiers.STATIC;
+                               cfile.add_constant_declaration (cdecl);
+
+                               if (param.direction == ParameterDirection.IN) {
+                                       in_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_" + param.name)));
+                               } else {
+                                       out_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_" + param.name)));
+                               }
+                       }
+
+                       if (!(m.return_type is VoidType)) {
+                               var info = new CCodeInitializerList ();
+                               info.append (new CCodeConstant ("-1"));
+                               info.append (new CCodeConstant ("\"%s\"".printf (dbus_result_name (m))));
+                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(m.return_type, m))));
+
+                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
+                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + m.name + "_result", info));
+                               cdecl.modifiers = CCodeModifiers.STATIC;
+                               cfile.add_constant_declaration (cdecl);
+
+                               out_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_result")));
+                       }
+
+                       in_args_info.append (new CCodeConstant ("NULL"));
+                       out_args_info.append (new CCodeConstant ("NULL"));
+
+                       var cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + m.name + "_in[]", in_args_info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + m.name + "_out[]", out_args_info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       var info = new CCodeInitializerList ();
+                       info.append (new CCodeConstant ("-1"));
+                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (m))));
+                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_in")), "GDBusArgInfo **"));
+                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_out")), "GDBusArgInfo **"));
+
+                       cdecl = new CCodeDeclaration ("const GDBusMethodInfo");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_method_info_" + m.name, info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_method_info_" + m.name)));
+               }
+
+               infos.append (new CCodeConstant ("NULL"));
+
+               var cdecl = new CCodeDeclaration ("const GDBusMethodInfo * const");
+               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_method_info[]", infos));
+               cdecl.modifiers = CCodeModifiers.STATIC;
+               cfile.add_constant_declaration (cdecl);
+
+               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_method_info");
+       }
+
+       CCodeExpression get_signal_info (ObjectTypeSymbol sym) {
+               var infos = new CCodeInitializerList ();
+
+               foreach (Signal sig in sym.get_signals ()) {
+                       if (sig.access != SymbolAccessibility.PUBLIC) {
+                               continue;
+                       }
+                       if (!is_dbus_visible (sig)) {
+                               continue;
+                       }
+
+                       var args_info = new CCodeInitializerList ();
+
+                       foreach (Parameter param in sig.get_parameters ()) {
+                               var info = new CCodeInitializerList ();
+                               info.append (new CCodeConstant ("-1"));
+                               info.append (new CCodeConstant ("\"%s\"".printf (param.name)));
+                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(param.variable_type, param))));
+
+                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
+                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + get_ccode_name (sig) + "_" + param.name, info));
+                               cdecl.modifiers = CCodeModifiers.STATIC;
+                               cfile.add_constant_declaration (cdecl);
+
+                               args_info.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, 
new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + get_ccode_name (sig) + "_" 
+ param.name)));
+                       }
+
+                       args_info.append (new CCodeConstant ("NULL"));
+
+                       var cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + get_ccode_name (sig) + "[]", args_info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       var info = new CCodeInitializerList ();
+                       info.append (new CCodeConstant ("-1"));
+                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (sig))));
+                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + get_ccode_name (sig))), "GDBusArgInfo **"));
+
+                       cdecl = new CCodeDeclaration ("const GDBusSignalInfo");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_signal_info_" + get_ccode_name (sig), info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_signal_info_" + get_ccode_name (sig))));
+               }
+
+               infos.append (new CCodeConstant ("NULL"));
+
+               var cdecl = new CCodeDeclaration ("const GDBusSignalInfo * const");
+               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_signal_info[]", infos));
+               cdecl.modifiers = CCodeModifiers.STATIC;
+               cfile.add_constant_declaration (cdecl);
+
+               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_signal_info");
+       }
+
+       CCodeExpression get_property_info (ObjectTypeSymbol sym) {
+               var infos = new CCodeInitializerList ();
+
+               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;
+                       }
+
+                       var info = new CCodeInitializerList ();
+                       info.append (new CCodeConstant ("-1"));
+                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (prop))));
+                       info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(prop.property_type, prop))));
+                       if (prop.get_accessor != null && prop.set_accessor != null) {
+                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_READABLE | 
G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
+                       } else if (prop.get_accessor != null) {
+                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_READABLE"));
+                       } else if (prop.set_accessor != null) {
+                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
+                       } else {
+                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_NONE"));
+                       }
+
+                       var cdecl = new CCodeDeclaration ("const GDBusPropertyInfo");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_property_info_" + prop.name, info));
+                       cdecl.modifiers = CCodeModifiers.STATIC;
+                       cfile.add_constant_declaration (cdecl);
+
+                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_property_info_" + prop.name)));
+               }
+
+               infos.append (new CCodeConstant ("NULL"));
+
+               var cdecl = new CCodeDeclaration ("const GDBusPropertyInfo * const");
+               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_property_info[]", infos));
+               cdecl.modifiers = CCodeModifiers.STATIC;
+               cfile.add_constant_declaration (cdecl);
+
+               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_property_info");
+       }
+
+       void declare_interface_info (ObjectTypeSymbol sym) {
+               var info = new CCodeInitializerList ();
+               info.append (new CCodeConstant ("-1"));
+               info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name (sym))));
+               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_method_info (sym)), "GDBusMethodInfo **"));
+               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_signal_info (sym)), "GDBusSignalInfo **"));
+               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_property_info (sym)), "GDBusPropertyInfo **"));
+
+               var cdecl = new CCodeDeclaration ("const GDBusInterfaceInfo");
+               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_interface_info", info));
+               cdecl.modifiers = CCodeModifiers.STATIC;
+               cfile.add_constant_declaration (cdecl);
+       }
+
+       protected CCodeExpression get_interface_info (ObjectTypeSymbol sym) {
+               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_interface_info");
+       }
+
+       public override void visit_class (Class cl) {
+               base.visit_class (cl);
+
+               visit_object_type_symbol (cl);
+       }
+
+       public override void visit_interface (Interface iface) {
+               base.visit_interface (iface);
+
+               visit_object_type_symbol (iface);
+       }
+
+       void visit_object_type_symbol (ObjectTypeSymbol sym) {
+               if (get_dbus_name (sym) == null) {
+                       return;
+               }
+
+               declare_interface_info(sym);
+       }
 }
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index 6e8ff5a..daf2a62 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -21,26 +21,6 @@
  */
 
 public class Vala.GDBusServerModule : GDBusClientModule {
-       public static bool is_dbus_visible (CodeNode node) {
-               var dbus_attribute = node.get_attribute ("DBus");
-               if (dbus_attribute != null
-                   && dbus_attribute.has_argument ("visible")
-                   && !dbus_attribute.get_bool ("visible")) {
-                       return false;
-               }
-
-               return true;
-       }
-
-       public static string dbus_result_name (Method m) {
-               var dbus_name = m.get_attribute_string ("DBus", "result");
-               if (dbus_name != null && dbus_name != "") {
-                       return dbus_name;
-               }
-
-               return "result";
-       }
-
        string generate_dbus_wrapper (Method m, ObjectTypeSymbol sym, bool ready = false) {
                string wrapper_name = "_dbus_%s".printf (get_ccode_name (m));
 
@@ -812,214 +792,6 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                cfile.add_function (cfunc);
        }
 
-       CCodeExpression get_method_info (ObjectTypeSymbol sym) {
-               var infos = new CCodeInitializerList ();
-
-               foreach (Method m in sym.get_methods ()) {
-                       if (m is CreationMethod || m.binding != MemberBinding.INSTANCE
-                           || m.overrides || m.access != SymbolAccessibility.PUBLIC) {
-                               continue;
-                       }
-                       if (!is_dbus_visible (m)) {
-                               continue;
-                       }
-
-                       var in_args_info = new CCodeInitializerList ();
-                       var out_args_info = new CCodeInitializerList ();
-
-                       foreach (Parameter param in m.get_parameters ()) {
-                               if (param.variable_type is ObjectType && 
param.variable_type.data_type.get_full_name () == "GLib.Cancellable") {
-                                       continue;
-                               }
-                               if (param.variable_type is ObjectType && 
param.variable_type.data_type.get_full_name () == "GLib.BusName") {
-                                       continue;
-                               }
-
-                               var info = new CCodeInitializerList ();
-                               info.append (new CCodeConstant ("-1"));
-                               info.append (new CCodeConstant ("\"%s\"".printf (param.name)));
-                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(param.variable_type, param))));
-
-                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
-                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + m.name + "_" + param.name, info));
-                               cdecl.modifiers = CCodeModifiers.STATIC;
-                               cfile.add_constant_declaration (cdecl);
-
-                               if (param.direction == ParameterDirection.IN) {
-                                       in_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_" + param.name)));
-                               } else {
-                                       out_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_" + param.name)));
-                               }
-                       }
-
-                       if (!(m.return_type is VoidType)) {
-                               var info = new CCodeInitializerList ();
-                               info.append (new CCodeConstant ("-1"));
-                               info.append (new CCodeConstant ("\"%s\"".printf (dbus_result_name (m))));
-                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(m.return_type, m))));
-
-                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
-                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + m.name + "_result", info));
-                               cdecl.modifiers = CCodeModifiers.STATIC;
-                               cfile.add_constant_declaration (cdecl);
-
-                               out_args_info.append (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_result")));
-                       }
-
-                       in_args_info.append (new CCodeConstant ("NULL"));
-                       out_args_info.append (new CCodeConstant ("NULL"));
-
-                       var cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + m.name + "_in[]", in_args_info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + m.name + "_out[]", out_args_info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       var info = new CCodeInitializerList ();
-                       info.append (new CCodeConstant ("-1"));
-                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (m))));
-                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_in")), "GDBusArgInfo **"));
-                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + m.name + "_out")), "GDBusArgInfo **"));
-
-                       cdecl = new CCodeDeclaration ("const GDBusMethodInfo");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_method_info_" + m.name, info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_method_info_" + m.name)));
-               }
-
-               infos.append (new CCodeConstant ("NULL"));
-
-               var cdecl = new CCodeDeclaration ("const GDBusMethodInfo * const");
-               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_method_info[]", infos));
-               cdecl.modifiers = CCodeModifiers.STATIC;
-               cfile.add_constant_declaration (cdecl);
-
-               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_method_info");
-       }
-
-       CCodeExpression get_signal_info (ObjectTypeSymbol sym) {
-               var infos = new CCodeInitializerList ();
-
-               foreach (Signal sig in sym.get_signals ()) {
-                       if (sig.access != SymbolAccessibility.PUBLIC) {
-                               continue;
-                       }
-                       if (!is_dbus_visible (sig)) {
-                               continue;
-                       }
-
-                       var args_info = new CCodeInitializerList ();
-
-                       foreach (Parameter param in sig.get_parameters ()) {
-                               var info = new CCodeInitializerList ();
-                               info.append (new CCodeConstant ("-1"));
-                               info.append (new CCodeConstant ("\"%s\"".printf (param.name)));
-                               info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(param.variable_type, param))));
-
-                               var cdecl = new CCodeDeclaration ("const GDBusArgInfo");
-                               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + 
get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + get_ccode_name (sig) + "_" + param.name, info));
-                               cdecl.modifiers = CCodeModifiers.STATIC;
-                               cfile.add_constant_declaration (cdecl);
-
-                               args_info.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, 
new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_arg_info_" + get_ccode_name (sig) + "_" 
+ param.name)));
-                       }
-
-                       args_info.append (new CCodeConstant ("NULL"));
-
-                       var cdecl = new CCodeDeclaration ("const GDBusArgInfo * const");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_arg_info_" + get_ccode_name (sig) + "[]", args_info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       var info = new CCodeInitializerList ();
-                       info.append (new CCodeConstant ("-1"));
-                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (sig))));
-                       info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_arg_info_" + get_ccode_name (sig))), "GDBusArgInfo **"));
-
-                       cdecl = new CCodeDeclaration ("const GDBusSignalInfo");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_signal_info_" + get_ccode_name (sig), info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_signal_info_" + get_ccode_name (sig))));
-               }
-
-               infos.append (new CCodeConstant ("NULL"));
-
-               var cdecl = new CCodeDeclaration ("const GDBusSignalInfo * const");
-               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_signal_info[]", infos));
-               cdecl.modifiers = CCodeModifiers.STATIC;
-               cfile.add_constant_declaration (cdecl);
-
-               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_signal_info");
-       }
-
-       CCodeExpression get_property_info (ObjectTypeSymbol sym) {
-               var infos = new CCodeInitializerList ();
-
-               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;
-                       }
-
-                       var info = new CCodeInitializerList ();
-                       info.append (new CCodeConstant ("-1"));
-                       info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (prop))));
-                       info.append (new CCodeConstant ("\"%s\"".printf (get_type_signature 
(prop.property_type, prop))));
-                       if (prop.get_accessor != null && prop.set_accessor != null) {
-                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_READABLE | 
G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
-                       } else if (prop.get_accessor != null) {
-                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_READABLE"));
-                       } else if (prop.set_accessor != null) {
-                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE"));
-                       } else {
-                               info.append (new CCodeConstant ("G_DBUS_PROPERTY_INFO_FLAGS_NONE"));
-                       }
-
-                       var cdecl = new CCodeDeclaration ("const GDBusPropertyInfo");
-                       cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix 
(sym) + "dbus_property_info_" + prop.name, info));
-                       cdecl.modifiers = CCodeModifiers.STATIC;
-                       cfile.add_constant_declaration (cdecl);
-
-                       infos.append (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new 
CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_property_info_" + prop.name)));
-               }
-
-               infos.append (new CCodeConstant ("NULL"));
-
-               var cdecl = new CCodeDeclaration ("const GDBusPropertyInfo * const");
-               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_property_info[]", infos));
-               cdecl.modifiers = CCodeModifiers.STATIC;
-               cfile.add_constant_declaration (cdecl);
-
-               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_property_info");
-       }
-
-       CCodeExpression get_interface_info (ObjectTypeSymbol sym) {
-               var info = new CCodeInitializerList ();
-               info.append (new CCodeConstant ("-1"));
-               info.append (new CCodeConstant ("\"%s\"".printf (get_dbus_name (sym))));
-               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_method_info (sym)), "GDBusMethodInfo **"));
-               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_signal_info (sym)), "GDBusSignalInfo **"));
-               info.append (new CCodeCastExpression (new CCodeUnaryExpression 
(CCodeUnaryOperator.ADDRESS_OF, get_property_info (sym)), "GDBusPropertyInfo **"));
-
-               var cdecl = new CCodeDeclaration ("const GDBusInterfaceInfo");
-               cdecl.add_declarator (new CCodeVariableDeclarator ("_" + get_ccode_lower_case_prefix (sym) + 
"dbus_interface_info", info));
-               cdecl.modifiers = CCodeModifiers.STATIC;
-               cfile.add_constant_declaration (cdecl);
-
-               return new CCodeIdentifier ("_" + get_ccode_lower_case_prefix (sym) + "dbus_interface_info");
-       }
-
        CCodeExpression get_interface_vtable (ObjectTypeSymbol sym) {
                var vtable = new CCodeInitializerList ();
                vtable.append (new CCodeIdentifier (get_ccode_lower_case_prefix (sym) + 
"dbus_interface_method_call"));


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