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;
                }
            }
        }
Пример #2
0
 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);
         }
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
        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("."));
            }
        }
Пример #6
0
        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);
        }
Пример #8
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        protected void VisitToUnit(JsUnit unit, List <IMember> list)
        {
            var nodes = list.Select(Visit).ToList();

            ImportToUnit(unit, nodes);
        }