From: Alan Knowles Date: Thu, 7 May 2015 06:27:08 +0000 (+0800) Subject: src/Palete/Gir.vala X-Git-Url: http://git.roojs.org/?p=app.Builder.js;a=commitdiff_plain;h=dc9993a6240436dcb1c947a7103d8bf1aa46f93d src/Palete/Gir.vala --- diff --git a/src/Palete/Gir.vala b/src/Palete/Gir.vala index 0881859d2..595b8d774 100644 --- a/src/Palete/Gir.vala +++ b/src/Palete/Gir.vala @@ -26,394 +26,7 @@ namespace Palete { INVALID_VALUE, INVALID_FORMAT } - public class GirObject: Object { - public string name; - public string ns; - public string propertyof; - public string type; - public string nodetype; - public string package; - - public GirObject paramset = null; - public GirObject return_value = null; - - public bool is_instance; - public bool is_array; - public bool is_varargs; - public bool ctor_only; // specially added ctor properties.. - public string parent; - public string value; - // to be filled in... - public string sig; - - bool is_overlaid; - - public GirObject gparent; - public Gee.ArrayList params; - public Gee.ArrayList implements; - public Gee.ArrayList inherits; // full list of all classes and interfaces... - public Gee.HashMap ctors; - public Gee.HashMap methods; - public Gee.HashMap includes; - public Gee.HashMap classes; - public Gee.HashMap props; - public Gee.HashMap consts; - public Gee.HashMap signals; - public string doctxt; - - - - public GirObject(string nodetype, string n) - { - this.nodetype = nodetype; - this.name = n; - this.ns = ""; - this.parent = ""; - this.type = ""; - this.propertyof = ""; - this.is_array = false; - this.is_instance = false; - this.is_varargs = false; - this.ctor_only =false; - this.doctxt = ""; - - this.sig = ""; - - this.gparent = null; - - this.implements = new Gee.ArrayList(); - this.inherits = new Gee.ArrayList(); // list of all ancestors. (interfaces and parents) - this.includes = new Gee.HashMap(); - - this.params = new Gee.ArrayList(); - this.ctors = new Gee.HashMap(); - this.methods =new Gee.HashMap(); - - this.classes = new Gee.HashMap(); - this.props = new Gee.HashMap(); - this.consts = new Gee.HashMap(); - this.signals = new Gee.HashMap(); - this.is_overlaid = false; - this.paramset = null; - } - - public string[] inheritsToStringArray() - { - string[] ret = {}; - for(var i =0;i< this.inherits.size; i++) { - ret += this.inherits.get(i); - } - return ret; - - } - - - public void overlayParent() - { - - if (this.parent.length < 1 || this.is_overlaid) { - this.is_overlaid = true; - return; - } - // print("Overlaying " +this.name + " with " + this.parent + "\n"); - - var pcls = this.clsToObject( this.parent); - if (pcls == null) { - throw new GirError.INVALID_VALUE("Could not find class : " + - this.parent + " of " + this.name + " in " + this.ns); - } - - pcls.overlayParent( ); - this.copyFrom(pcls,false); - for(var i=0; i < this.implements.size; i++) { - var clsname = this.implements.get(i); - var picls = this.clsToObject(clsname); - this.copyFrom(picls,true); - } - this.is_overlaid = true; - - } - - public void overlayCtorProperties() - { - //print("Check overlay Ctor %s\n", this.name); - if (!this.ctors.has_key("new")) { - return; - } - var ctor = this.ctors.get("new"); - if (ctor.paramset == null || ctor.paramset.params.size < 1) { - return; - } - //print("Found Ctor\n"); - var iter = ctor.paramset.params.list_iterator(); - while (iter.next()) { - var n = iter.get().name; - - if (this.props.has_key(n)) { - continue; - } - if (n == "...") { - continue; - } - //print("Adding prop %s\n", n); - - // it's a new prop.. - var c = new GirObject("Prop",n); - c.gparent = this; - c.ns = this.ns; - c.propertyof = this.name; - c.type = iter.get().type; - c.ctor_only = true; - this.props.set(n, c); - } - - - } - - - - public GirObject clsToObject(string in_pn) - { - var pn = in_pn; - var gir = Gir.factory (this.ns); - if (in_pn.contains(".")) { - gir = Gir.factory(in_pn.split(".")[0]); - pn = in_pn.split(".")[1]; - } - - return gir.classes.get(pn); - - - } - public string fqn() { - // not sure if fqn really is correct here... - // - return this.nodetype == "Class" || this.nodetype=="Interface" - ? this.name : (this.ns + this.name); - } - - public void copyFrom(GirObject pcls, bool is_interface) - { - - this.inherits.add(pcls.fqn()); - - var liter = pcls.inherits.list_iterator(); - while(liter.next()) { - if (this.inherits.contains(liter.get())) { - continue; - } - this.inherits.add(liter.get()); - } - - - var iter = pcls.methods.map_iterator(); - while(iter.next()) { - if (null != this.methods.get(iter.get_key())) { - continue; - } - - this.methods.set(iter.get_key(), iter.get_value()); - } - - iter = pcls.props.map_iterator(); - while(iter.next()) { - if (null != this.props.get(iter.get_key())) { - continue; - } - - this.props.set(iter.get_key(), iter.get_value()); - } - - iter = pcls.signals.map_iterator(); - while(iter.next()) { - if (null != this.signals.get(iter.get_key())) { - continue; - } - - this.signals.set(iter.get_key(), iter.get_value()); - } - } - - public Json.Object toJSON() - { - var r = new Json.Object(); - r.set_string_member("nodetype", this.nodetype); - r.set_string_member("name", this.name); - if (this.propertyof.length > 0) { - r.set_string_member("of", this.propertyof); - } - if (this.type.length > 0) { - r.set_string_member("type", this.type); - } - if (this.parent != null && this.parent.length > 0) { - r.set_string_member("parent", this.parent); - } - if (this.sig.length > 0) { - r.set_string_member("sig", this.sig); - } - - // is_arary / is_instance / is_varargs.. - - - if (this.inherits.size > 0) { - r.set_array_member("inherits", this.toJSONArrayString(this.inherits)); - } - - if (this.implements.size > 0) { - r.set_array_member("implements", this.toJSONArrayString(this.implements)); - } - - if (this.params.size > 0) { - r.set_array_member("params", this.toJSONArrayObject(this.params)); - } - if (this.ctors.size > 0) { - r.set_object_member("ctors", this.toJSONObject(this.ctors)); - } - if (this.methods.size > 0) { - r.set_object_member("methods", this.toJSONObject(this.methods)); - } - if (this.includes.size > 0) { - r.set_object_member("includes", this.toJSONObjectString(this.includes)); - } - if (this.classes.size > 0) { - r.set_object_member("classes", this.toJSONObject(this.classes)); - } - if (this.props.size > 0) { - r.set_object_member("props", this.toJSONObject(this.props)); - } - if (this.consts.size > 0) { - r.set_object_member("consts", this.toJSONObject(this.consts)); - } - if (this.signals.size > 0) { - r.set_object_member("signals", this.toJSONObject(this.signals)); - } - if (this.paramset != null) { - r.set_object_member("paramset", this.paramset.toJSON()); - } - if (this.return_value != null) { - r.set_object_member("return_value", this.return_value.toJSON()); - } - return r; - } - public Json.Object toJSONObject(Gee.HashMap map) - { - var r = new Json.Object(); - var iter = map.map_iterator(); - while(iter.next()) { - r.set_object_member(iter.get_key(), iter.get_value().toJSON()); - } - return r; - } - public Json.Object toJSONObjectString(Gee.HashMap map) - { - var r = new Json.Object(); - var iter = map.map_iterator(); - while(iter.next()) { - r.set_string_member(iter.get_key(), iter.get_value()); - } - return r; - } - public Json.Array toJSONArrayString(Gee.ArrayList map) - { - var r = new Json.Array(); - for(var i =0;i< map.size;i++) { - - r.add_string_element(map.get(i)); - } - return r; - } - public Json.Array toJSONArrayObject(Gee.ArrayList map) - { - var r = new Json.Array(); - for(var i =0;i< map.size;i++) { - - r.add_object_element(map.get(i).toJSON()); - } - return r; - } - public string asJSONString() - { - var generator = new Json.Generator (); - generator.indent = 4; - generator.pretty = true; - var n = new Json.Node(Json.NodeType.OBJECT); - n.set_object(this.toJSON()); - generator.set_root(n); - - return generator.to_data(null); - } - - - public GirObject fetchByFqn(string fqn) { - //print("Searching (%s)%s for %s\n", this.nodetype, this.name, fqn); - var bits = fqn.split("."); - - var ret = this.classes.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - - ret = this.ctors.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - - ret = this.methods.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - ret = this.props.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - ret = this.consts.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - - ret = this.signals.get(bits[0]); - if (ret != null) { - if (bits.length < 2) { - return ret; - } - return ret.fetchByFqn(fqn.substring(bits[0].length+1)); - } - if (this.paramset == null) { - return null; - } - var iter = this.paramset.params.list_iterator(); - while (iter.next()) { - var p = iter.get(); - if (p.name != bits[0]) { - continue; - } - return p; - } - - // fixme - other queires? - enums? - return null; - } - - public string fqtype() { - return Gir.fqtypeLookup(this.type, this.ns); - } - }