[vala/wip/tintou/dbus-autogen] WIP: Add code to automatically generate GDBusProxy classes
- From: Corentin Noël <corentinnoel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/tintou/dbus-autogen] WIP: Add code to automatically generate GDBusProxy classes
- Date: Mon, 30 Mar 2020 09:54:09 +0000 (UTC)
commit 794348a54a303aecd6c5ee7e985d322d2a17b2ab
Author: Corentin Noël <corentin elementary io>
Date: Mon Mar 30 11:53:29 2020 +0200
WIP: Add code to automatically generate GDBusProxy classes
codegen/valagdbusclientmodule.vala | 43 ++++++++++++++++++++++++++++++++++++++
vala/valasemanticanalyzer.vala | 5 -----
2 files changed, 43 insertions(+), 5 deletions(-)
---
diff --git a/codegen/valagdbusclientmodule.vala b/codegen/valagdbusclientmodule.vala
index 12a7693d2..3068e9655 100644
--- a/codegen/valagdbusclientmodule.vala
+++ b/codegen/valagdbusclientmodule.vala
@@ -171,6 +171,32 @@ public class Vala.GDBusClientModule : GDBusModule {
}
}
+ private Method create_g_signal_override (Interface iface, Signal signl) {
+ var g_signal_override = new Method (signl.name, signl.return_type, null, null);
+ g_signal_override.overrides = true;
+ unowned List<Parameter> parameters = signl.get_parameters ();
+ Parameter signal_name_param = parameters.get (1);
+ Parameter params_param = parameters.get (2);
+ foreach (var param in parameters) {
+ g_signal_override.add_parameter (param);
+ }
+
+ g_signal_override.body = new Block (null);
+ var signal_name_param_access = new MemberAccess.simple (signal_name_param.name, null);
+ signal_name_param_access.value_type = signal_name_param.variable_type;
+ //Report.warning (iface.source_reference, "%s".printf (signal_name_param.name));
+
+ var switch_statement = new SwitchStatement (signal_name_param_access, null);
+ /*foreach (var iface_signl in iface.get_signals ()) {
+ var section = new SwitchSection (null);
+ var label = new SwitchLabel (new StringLiteral (iface_signl.name, null), null);
+ section.add_label (label);
+ switch_statement.add_section (section);
+ }*/
+ g_signal_override.body.add_statement (switch_statement);
+ return g_signal_override;
+ }
+
public override void visit_interface (Interface iface) {
base.visit_interface (iface);
@@ -196,6 +222,23 @@ public class Vala.GDBusClientModule : GDBusModule {
type_macro = "G_DEFINE_TYPE_EXTENDED";
}
+ var proxy_vala_class = new Vala.Class (iface.name + "2", iface.source_reference, null);
+ var context = Vala.CodeContext.@get ();
+ var root_symbol = context.root;
+ var glib_ns = root_symbol.scope.lookup ("GLib");
+ var dbusproxy_type = (Vala.Class) glib_ns.scope.lookup ("DBusProxy");
+ proxy_vala_class.base_class = dbusproxy_type;
+ proxy_vala_class.add_base_type (new InterfaceType (iface));
+ foreach (var sgnal in dbusproxy_type.get_signals ()) {
+ if (sgnal.name == "g_signal") {
+ var method = create_g_signal_override (iface, sgnal);
+ proxy_vala_class.add_method (method);
+ }
+ }
+ iface.parent_symbol.add_class (proxy_vala_class);
+ iface.parent_symbol.check (context);
+ proxy_vala_class.accept (this);
+
var define_type = new CCodeFunctionCall (new CCodeIdentifier (type_macro));
define_type.add_argument (new CCodeIdentifier (cname));
define_type.add_argument (new CCodeIdentifier (lower_cname));
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index f2d2bdd1f..1df779513 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -476,11 +476,6 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
return false;
}
- if (type_sym is Interface && type_sym.get_attribute ("DBus") != null) {
- // GObject properties not currently supported in D-Bus interfaces
- return false;
- }
-
return true;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]