X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FLsp.vala;h=fb2dae7bc9c57553dade5a29cbb61c74a9a56674;hb=d6bf226a7fd92c81e62facf221f3e0b44830704c;hp=6bc7166b418ddeeda9a75c85510675f1ba58d1c6;hpb=fbbef3c5de3be736e3c43a69c4e614d4e07c4b26;p=roobuilder diff --git a/src/Lsp.vala b/src/Lsp.vala index 6bc7166b4..fb2dae7bc 100644 --- a/src/Lsp.vala +++ b/src/Lsp.vala @@ -869,6 +869,12 @@ namespace Lsp { } public class MarkedString : Object { + public MarkedString(string language, string value) + { + this.language = language; + this.value = value; + GLib.debug("new marked string %s : %s", language, value); + } public string language { get; set; } public string value { get; set; } } @@ -906,8 +912,33 @@ namespace Lsp { return node; } - public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) { - error ("deserialization not supported"); + public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) + { + if (property_name == "contents") { + value = GLib.Value (typeof(Gee.ArrayList)); + if (property_node.get_node_type () != Json.NodeType.ARRAY) { + warning ("unexpected property node type for 'arguments' %s", property_node.get_node_type ().to_string ()); + return false; + } + var contents = new Gee.ArrayList(); + + property_node.get_array ().foreach_element ((array, index, element) => { + try { + var add = new MarkedString( + array.get_object_element(index).get_string_member("language"), + array.get_object_element(index).get_string_member("value") + ); + + contents.add ( add ); + } catch (Error e) { + warning ("argument %u to command could not be deserialized: %s", index, e.message); + } + }); + value.set_object (contents); + return true; + } + + return default_deserialize_property (property_name, out value, pspec, property_node); } }