void ExportNamespace(JsUnit unit, string ns) { var Writer = new StringWriter(); if (ns.IsNotNullOrEmpty()) { var tokens = ns.Split('.'); for (var i = 0; i < tokens.Length; i++) { var ns2 = tokens.Take(i + 1).StringJoin("."); JsStatement st; if (i == 0) { st = Js.Var(ns2, Js.Json()).Statement(); } else { st = Js.Member(ns2).Assign(Js.Json()).Statement(); } var st2 = Js.If(Js.Typeof(Js.Member(ns2)).Equal(Js.String("undefined"))).Then(st); unit.Statements.Add(st2); st2.AddAnnotation(new NamespaceVerificationAnnotation { Namespace = ns2 }); //.Ex(true).NamespaceVerification = ns2; } } }
protected void ImportToUnit(JsUnit unit, List <JsNode> list) { foreach (var node in list) { if (node == null) { continue; } JsStatement st = null; if (node is JsFunction) { st = ((JsFunction)node).Statement(); } else if (node is JsNodeList) { ImportToUnit(unit, ((JsNodeList)node).Nodes); } else if (node is JsUnit) { unit.Statements.AddRange(((JsUnit)node).Statements); } else { st = (JsStatement)node; } if (st != null) { unit.Statements.Add(st); } } }
protected virtual JsUnit OnAfterExportType(ITypeDefinition ce, JsClrType jsType) { //HACK: backward if (jsType.Kind == JsClrTypeKind.Interface && jsType.baseTypeName.IsNullOrEmpty()) { jsType.baseTypeName = "System.Object"; } var unit = new JsUnit { Statements = new List <JsStatement>() }; unit.Statements.Add(VerifyJsTypesArrayStatement.Clone()); var json = (JsJsonObjectExpression)Serialize(jsType); var moveToEnd = json.NamesValues.Where(t => t.Name.Name.Contains("definition")).ToList(); moveToEnd.ForEach(t => json.NamesValues.Remove(t)); json.NamesValues.AddRange(moveToEnd); var ceVarName = GetJsTypeName(ce).Replace(".", "$"); unit.Statements.Add(Js.Var(ceVarName, json).Statement()); unit.Statements.Add(Js.Member("JsTypes").Member("push").Invoke(Js.Member(ceVarName)).Statement()); return(unit); }
protected JsUnit VisitToUnit(List <IMember> list) { var unit = new JsUnit { Statements = new List <JsStatement>() }; VisitToUnit(unit, list); return(unit); }
void ExportTypeNamespace(JsUnit unit, ITypeDefinition ce) { var name = GetJsTypeName(ce); if (name.IsNotNullOrEmpty() && name.Contains(".")) { var ns = name.Split('.'); ns = ns.Take(ns.Length - 1).ToArray(); ExportNamespace(unit, ns.StringConcat(".")); } }
protected override JsUnit OnAfterExportType(ITypeDefinition ce, JsClrType jsType) { var extJsType = new ExtJsType { extend = jsType.baseTypeName, statics = jsType.staticDefinition, }; //if (extJsType.extend == "System.Object") // extJsType.extend = null; var json = (JsJsonObjectExpression)Serialize(extJsType); //var ctor = json.NamesValues.Where(t => t.Name.Name == "ctor").FirstOrDefault(); if (jsType.definition == null) { jsType.definition = new JsObject(); } var ctor = jsType.definition.TryGetValue("ctor"); if (ctor != null) { jsType.definition.Remove("ctor"); jsType.definition.Add("constructor", ctor); //ctor.Name.Name = "constructor"; //var func = ctor.Value as JsFunction; //if (func != null) //{ // func.Block.Statements.Insert(0, Js.This().Member("callSuper").Invoke(Js.Member("arguments")).Statement()); //} } foreach (var me in jsType.definition) { var name = me.Key; var value = (JsExpression)me.Value; if (json.NamesValues == null) { json.NamesValues = new List <JsJsonNameValue>(); } json.NamesValues.Add(new JsJsonNameValue { Name = new JsJsonMember { Name = name }, Value = value }); } var define = Js.Members("Ext.define").Invoke(Js.String(jsType.fullname), json).Statement(); var unit = new JsUnit { Statements = new List <JsStatement> { define } }; return(unit);// base.OnAfterExportType(ce, jsType); }
public override JsNode _VisitEnum(ITypeDefinition ce) { var unit = new JsUnit { Statements = new List <JsStatement>() }; ExportTypeNamespace(unit, ce); var json = VisitEnumToJson(ce); var typeName = GetJsTypeName(ce); var st = Js.Members(typeName).Assign(json).Statement(); unit.Statements.Add(st); return(unit); }
JsFile CreateExternalJsFile(string filename) { var unit = new JsUnit { Statements = new List <JsStatement>() }; var st = new JsCodeStatement { Code = File.ReadAllText(filename) }; var file = new JsFile { Filename = filename, Units = new List <JsUnit> { unit } }; unit.Statements.Add(st); return(file); }
public override JsNode _VisitClass(ITypeDefinition ce) { var unit = new JsUnit { Statements = new List <JsStatement>() }; ExportTypeNamespace(unit, ce); var members = GetMembersToExport(ce); VisitToUnit(unit, members); var baseCe = ce.GetBaseTypeDefinition(); if (baseCe != null && Sk.IsNativeType(baseCe) && !Sk.IsGlobalType(baseCe) && !Sk.OmitInheritance(ce)) { unit.Statements.Add(Js.Member("$Inherit").Invoke(SkJs.EntityToMember(ce), SkJs.EntityToMember(baseCe)).Statement()); } return(unit); }
JsUnit ConvertTypeDefinition(ITypeDefinition ce) { var unit = new JsUnit { Statements = new List <JsStatement>() }; var att = ce.GetJsTypeAttribute(); if (att != null && att.PreCode != null) { unit.Statements.Add(Js.CodeStatement(att.PreCode)); } var isGlobal = att != null && att.GlobalObject; var isNative = att != null && att.Native; var isClr = !isGlobal && !isNative; var mc = GetMemberConverter(ce); var unit2 = (JsUnit)mc.Visit(ce); if (unit2 != null && unit2.Statements.IsNotNullOrEmpty()) { unit.Statements.AddRange(unit2.Statements); } else { Log.Warn(ce, "No code was generated for type: " + ce.FullName); } if (att != null && att.PostCode != null) { unit.Statements.Add(Js.CodeStatement(att.PostCode)); } return(unit); }
protected void VisitToUnit(JsUnit unit, List <IMember> list) { var nodes = list.Select(Visit).ToList(); ImportToUnit(unit, nodes); }