Пример #1
0
        public MetaItem(Node node)
        {
            Node = node;
            Name = node.GetAttributeValue("name");
            FormattedName = StringUtils.CapitalizeFirstLetter(Name);

            // Get item comment
            if (Node.Children != null)
            {
                var descNode = Node.GetChildByType(NodeType.Desc);
                if (descNode != null && !String.IsNullOrWhiteSpace(descNode.Attributes["text"]))
                {
                    Comment = descNode.Attributes["text"];
                }
            }

            OverriddenFrom = node.GetAttributeValue("overriddenFrom");
            if (OverriddenFrom != null)
            {
                OverriddenFrom = TypeMapper.MapType(OverriddenFrom);
            }

            DocFrom = node.GetAttributeValue("docFrom");
            if (DocFrom != null)
            {
                DocFrom = TypeMapper.MapType(DocFrom);
            }
        }
Пример #2
0
 public MetaEvent(Node node) : base(node)
 {
     var typesNode = node.GetChildByType(NodeType.Types);
     if (typesNode != null)
     {
         EventType = TypeMapper.MapType(typesNode.Children[0].GetAttributeValue("type"));
     }
     // Add 'On' in front of all the event names because many times there will be properties or methods with the same names
     FormattedName = "On" + FormattedName;
 }
Пример #3
0
        public MetaMethodParameter(Node node)
            : base(node)
        {
            if (node.Children != null)
            {
                // There could be more than one parameter type, in which case make it an object
                var typesNode = node.GetChildByType(NodeType.Types);
                if (typesNode.Children.Count == 1)
                {
                    Type = typesNode.Children[0].GetAttributeValue("type");
                }
                else
                {
                    // If only one of the parameter types is non-null, set it as a parameter type
                    // otherwise set the parameter type to object
                    var nonNullTypes = new List<string>();
                    foreach (var typeNode in typesNode.Children)
                    {
                        var type = typeNode.GetAttributeValue("type");
                        if (type != "null")
                        {
                            nonNullTypes.Add(type);
                        }
                    }
                    if (nonNullTypes.Count == 1)
                    {
                        Type = nonNullTypes[0];
                    }
                    else
                    {
                        Type = "object";
                    }
                }
            }

            if (Type == "Function" && Name == "listener")
                Type = "FunctionListener";

            Type = TypeMapper.MapType(Type);
            if (Type == null)
            {
                Type = "object";
            }

            DefaultValue = node.GetAttributeValue("defaultValue");
            FormatDefaultValue();

            Name = TypeMapper.EscapeIdentifier(Name);
        }
Пример #4
0
        public MetaMethod(Node node, MetaClass metaClass) : base(node)
        {
            IsConstructor = node.Attributes.ContainsKey("isCtor") && node.GetAttributeValue("isCtor") == "True";
            if (IsConstructor)
            {
                Name = metaClass.Name;
                FormattedName = Name;
                ReturnType = "";
            }
            else
            {
                FormattedName = StringUtils.CapitalizeFirstLetter(FormattedName.Replace("$", ""));
            }

            IsStatic = node.Attributes.ContainsKey("isStatic") && node.GetAttributeValue("isStatic") == "True";

            AccessType = node.GetAttributeValue("access");
            if (AccessType == null) AccessType = "public";

            Parameters = new List<MetaMethodParameter>();
            var paramsNode = node.GetChildByType(NodeType.Params);
            if (paramsNode != null)
            {
                foreach (var el in paramsNode.Children)
                {
                    Parameters.Add(new MetaMethodParameter(el));
                }
            }

            // Make all parameters following the optional ones to also be optional (not always the case)
            bool hasOptional = false;
            foreach (var parameter in Parameters)
            {
                if (parameter.DefaultValue != null)
                {
                    hasOptional = true;
                }
                else if (hasOptional)
                {
                    parameter.DefaultValue = "null";
                    parameter.FormatDefaultValue();
                }
            }

            // Get the return / parameter type from the relevant property (if there is one)
            var fromProperty = node.GetAttributeValue("fromProperty");
            if (fromProperty != null)
            {
                var property = metaClass.Properties.FirstOrDefault(p => p.Name == fromProperty);
                if (property != null)
                {
                    if (Name.StartsWith("get"))
                    {
                        ReturnType = property.Type;
                    }
                    else if (Name.StartsWith("set"))
                    {
                        Parameters[0].Type = property.Type;
                    }
                }
            }

            // Get return type from the metadata
            if (ReturnType == null && fromProperty == null)
            {
                var returnNode = node.GetChildByType(NodeType.Return);
                if (returnNode != null)
                {
                    var typesNode = returnNode.GetChildByType(NodeType.Types);
                    if (typesNode != null)
                    {
                        // There could be more than one return type, in which case make it an object
                        if (typesNode.Children.Count == 1)
                        {
                            ReturnType = typesNode.Children[0].GetAttributeValue("type");
                        }
                        else
                        {
                            // If only one of the return types is non-null, set it as a return type
                            // otherwise set the return type to object
                            var nonNullTypes = new List<string>();
                            foreach (var typeNode in typesNode.Children)
                            {
                                var type = typeNode.GetAttributeValue("type");
                                if (type != "null")
                                {
                                    nonNullTypes.Add(type);
                                }
                            }
                            if (nonNullTypes.Count == 1)
                            {
                                ReturnType = nonNullTypes[0];
                            }
                            else
                            {
                                ReturnType = "object";
                            }
                        }
                    }
                    var commentNode = returnNode.GetChildByType(NodeType.Desc);
                    if (commentNode != null)
                    {
                        ReturnComment = commentNode.GetAttributeValue("text");
                    }
                }
            }
            if (ReturnType == "null")
                ReturnType = "object";

            if (!IsConstructor)
            {
                if (ReturnType == null)
                    ReturnType = "void";
                else
                    ReturnType = TypeMapper.MapType(ReturnType);
            }
        }