示例#1
0
        public DocTopic ParseClass(DotnetObject obj, DocTopic parentTopic)
        {
            var topic = new DocTopic(_project)
            {
                Title = $"{obj.FormattedName} Class",
                //ListTitle = obj.FormattedName,
                DisplayType = "classheader",

                ClassInfo = new ClassInfo
                {
                    MemberName      = obj.Name,
                    Signature       = obj.Signature,
                    RawSignature    = obj.RawTypeName,
                    Namespace       = obj.Namespace,
                    Scope           = obj.Scope,
                    Syntax          = obj.Syntax,
                    Implements      = obj.Implements,
                    Inherits        = obj.InheritsFrom,
                    InheritanceTree = obj.InheritanceTree,
                    Classname       = obj.FormattedName,
                    Assembly        = obj.Assembly,
                },

                Remarks = obj.Remarks,
                Example = obj.Example,
                SeeAlso = obj.SeeAlso,
            };

            topic.Parent = parentTopic;
            topic.CreateRelativeSlugAndLink(topic);
            topic.Body = obj.HelpText;

            parentTopic?.Topics.Add(topic);

            foreach (var meth in obj.Methods.Where(m => m.IsConstructor))
            {
                var childTopic = ParseMethod(meth, topic);
                parentTopic.Topics.Add(childTopic);
            }
            foreach (var meth in obj.Methods.Where(m => !m.IsConstructor).OrderBy(m => m.Name))
            {
                var childTopic = ParseMethod(meth, topic);
                parentTopic.Topics.Add(childTopic);
            }
            foreach (var prop in obj.Properties.OrderBy(p => p.Name))
            {
                var childTopic = ParseProperty(prop, topic);
                parentTopic.Topics.Add(childTopic);
            }
            //foreach (var ev in obj.Events)
            //{
            //    var childTopic = ParseEvent(ev, parentTopic);
            //    parentTopic.Topics.Add(childTopic);
            //}
            return(topic);
        }
示例#2
0
        void RenderType(DotnetObject type)
        {
            Console.WriteLine($"{type} -  - {type.Signature}");


            if (type.Properties.Count > 0)
            {
                Console.WriteLine("  *** Properties:");
                foreach (var prop in type.Properties)
                {
                    Console.WriteLine($"* {prop}  -  {prop.Signature} - {prop.Type}");
                    Console.WriteLine($"{prop.HelpText}");
                    Console.WriteLine("---");
                }
            }
        }
示例#3
0
        private Object getStaticMember(string key)
        {
            var members = ClassType.GetMembers(BindingFlags.Static | BindingFlags.Public);
            var target  = (from member in members
                           where ((member.MemberType == MemberTypes.Field ||
                                   member.MemberType == MemberTypes.Property ||
                                   member.MemberType == MemberTypes.Method ||
                                   member.MemberType == MemberTypes.NestedType) &&
                                  member.Name == key)
                           select member);
            Object result = null;

            if (target.Any())
            {
                MemberInfo  memberInfo  = target.First();
                MemberTypes memberTypes = memberInfo.MemberType;
                if (memberTypes == MemberTypes.Property)
                {
                    result = new DotnetObject
                                 ((memberInfo as PropertyInfo).GetValue(null));
                }
                else if (memberTypes == MemberTypes.Field)
                {
                    result = new DotnetObject
                                 ((memberInfo as FieldInfo).GetValue(null));
                }
                else if (memberTypes == MemberTypes.NestedType)
                {
                    result = new DotnetClass
                    {
                        ClassType = memberInfo as Type
                    };
                }
                else
                {
                    result = new DotnetMethod
                    {
                        Target     = null,
                        Type       = ClassType,
                        methodName = key
                    };
                }
            }
            return(result);
        }
示例#4
0
        public override Object Invoke(List <Object> callParams)
        {
            List <Type>   types        = new List <Type>();
            List <object> targetParams = DotnetObject.toObjects(callParams);

            foreach (var aparam in targetParams)
            {
                types.Add(aparam.GetType());
            }
            MethodInfo method = Type.GetMethod(methodName, types.ToArray());

            object result = method.Invoke(Target, targetParams.ToArray());

            if (result is null)
            {
                return(null);
            }
            return(DotnetObject.toScriptObject(Engine, result));
        }
示例#5
0
 public override void setItem(string key, Object value)
 {
     if (GetMember(key) is MemberInfo member)
     {
         MemberTypes type = member.MemberType;
         if (type == MemberTypes.Method)
         {
             throw new System.Exception("You can't assign it to a function.");
         }
         else if (type == MemberTypes.Field)
         {
             Type.GetField(key).SetValue(Target, DotnetObject.toObject(value));
         }
     }
     else
     {
         base.setItem(key, value);
     }
 }
示例#6
0
        public override Object Create(List <Object> ctorParams)
        {
            object instance = Activator.CreateInstance(ClassType, DotnetObject.toObjects(ctorParams).ToArray());

            return(new DotnetObject(instance));
        }
示例#7
0
 private void loadGlobal()
 {
     RootContext["Clr"]    = new DotnetNamespace();
     RootContext["Object"] = new ObjectPrototype();
     RootContext["System"] = new DotnetObject(new SystemClass());
 }