Fix #8049 - language server hover and editor hover (not supported for gtkview / rooview)
[roobuilder] / src / Lsp.vala
index 6bc7166..fb2dae7 100644 (file)
@@ -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<MarkedString>();
+
+                       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);
         }
     }