summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2017-12-07 10:46:15 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2023-04-29 21:00:17 +0200
commit165a657b30be21f26b1032758a7faaa5ca7cdaf2 (patch)
treeff7333433cc25a6fba1c51023469291a59fddc66
parent55caa5fcc6c8deb07cd76c73e273f8545347c3aa (diff)
downloadvala-165a657b30be21f26b1032758a7faaa5ca7cdaf2.tar.gz
dbusgen: Add some annotations todos
-rw-r--r--dbusgen/valadbusparser.vala65
1 files changed, 65 insertions, 0 deletions
diff --git a/dbusgen/valadbusparser.vala b/dbusgen/valadbusparser.vala
index 46dc80b35..612f30cf9 100644
--- a/dbusgen/valadbusparser.vala
+++ b/dbusgen/valadbusparser.vala
@@ -24,6 +24,9 @@ using GLib;
/**
* Code visitor parsing all DBus Interface files.
+ *
+ * https://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format
+ * https://dbus.freedesktop.org/doc/dbus-api-design.html#annotations
*/
public class Vala.DBusParser : CodeVisitor {
@@ -192,24 +195,86 @@ public class Vala.DBusParser : CodeVisitor {
return;
}
+ string? val = reader.get_attribute ("value");
+ if (val == null) {
+ Report.warning (get_current_src (), "Annotations require a value attribute");
+ return;
+ }
+
switch (name) {
case "org.freedesktop.DBus.Deprecated":
+ // Can be used on any <interface>, <method>, <signal> and <property> element to specify that the element is deprecated
+ // if its value is true. Note that this annotation is defined in the D-Bus specification[1] and can only assume the
+ // values true and false. In particular, you cannot specify the version that the element was deprecated in nor any
+ // helpful deprecation message. Such information should be added to the element documentation instead.
+ if (val != "true") {
+ break;
+ }
current_node.set_attribute_bool ("Version", "deprecated", true);
string? replaced_by = reader.get_attribute ("replaced-by");
if (replaced_by != null) {
current_node.set_attribute_string ("Version", "replacement", replaced_by);
}
break;
+ case "org.freedesktop.DBus.Property.EmitsChangedSignal":
+ // val in {true,invalidates,const,false}
+ // If set to false, the org.freedesktop.DBus.Properties.PropertiesChanged signal, see the section called
+ // “org.freedesktop.DBus.Properties” is not guaranteed to be emitted if the property changes.
+ // If set to const the property never changes value during the lifetime of the object it belongs to, and hence the
+ // signal is never emitted for it.
+ // If set to invalidates the signal is emitted but the value is not included in the signal.
+ // If set to true the signal is emitted with the value included.
+ // The value for the annotation defaults to true if the enclosing interface element does not specify the annotation.
+ // Otherwise it defaults to the value specified in the enclosing interface element.
+ // This annotation is intended to be used by code generators to implement client-side caching of property values.
+ // For all properties for which the annotation is set to const, invalidates or true the client may unconditionally
+ // cache the values as the properties don't change or notifications are generated for them if they do.
+ //TODO
+ break;
case "org.freedesktop.DBus.GLib.Async":
if (current_node is Method) {
((Method) current_method).coroutine = true;
}
break;
case "org.freedesktop.DBus.GLib.NoReply":
+ if (val != "true") {
+ break;
+ }
if (current_node is Method) {
current_node.set_attribute_bool ("DBus", "no_reply", true);
}
break;
+ case "org.freedesktop.DBus.GLib.CSymbol":
+ case "org.gtk.GDBus.C.Name":
+ // Can be used on any <interface>, <method>, <signal> and <property> element to specify the name to use when generating
+ // C code. The value is expected to be in CamelCase[4] or Ugly_Case (see above).
+ if (val != null) {
+ current_node.set_attribute_string ("CCode", "cname", val);
+ }
+ break;
+ case "org.gtk.GDBus.C.ForceGVariant":
+ // If set to a non-empty string, a #GVariant instance will be used instead of the natural C type. This annotation can be
+ // used on any <arg> and <property> element.
+ //TODO
+ break;
+ case "org.gtk.GDBus.C.UnixFD":
+ // If set to a non-empty string, the generated code will include parameters to exchange file descriptors using the
+ // #GUnixFDList type. This annotation can be used on <method> elements.
+ //TODO
+ break;
+ case "org.gtk.GDBus.Since":
+ // Can be used on any <interface>, <method>, <signal> and <property> element to specify the version (any free-form
+ // string but compared using a version-aware sort function) the element appeared in.
+ //TODO
+ break;
+ case "org.gtk.GDBus.DocString":
+ // A string with Docbook content for documentation. This annotation can be used on <interface>, <method>, <signal>,
+ // <property> and <arg> elements.
+ case "org.gtk.GDBus.DocString.Short":
+ // A string with Docbook content for short/brief documentation. This annotation can only be used on <interface>
+ // elements.
+ //TODO
+ break;
default:
break;
}