Ejemplo n.º 1
0
        public static CSNamespace FromText(string text)
        {
            CSNamespace    result  = new CSNamespace();
            bool           newType = true;
            CSMemberedType last    = null;

            foreach (var _line in text.Split('\n'))
            {
                var line = _line.Replace("\r", "");
                if (string.IsNullOrEmpty(line))
                {
                    newType = true;
                    continue;
                }
                if (newType)
                {
                    newType = false;
                    int        minusIndex       = line.IndexOf('-');
                    string     typeName         = line.Substring(0, minusIndex);
                    Attributes attributes       = (Attributes)uint.Parse(line.Substring(minusIndex + 1));
                    string[]   dotSplitTypeName = typeName.Split('.');
                    var        cNamespace       = result;
                    for (int n = 0; n < dotSplitTypeName.Length; n++)
                    {
                        var item = dotSplitTypeName[n];
                        if (n == dotSplitTypeName.Length - 1)
                        {
                            cNamespace.NestedClasses.Add(last = new CSMemberedType
                            {
                                Name       = item,
                                Attributes = attributes
                            });
                            break;
                        }
                        var firstOrDefault = cNamespace.NestedNamespaces.FirstOrDefault(v => v.name == item);
                        if (firstOrDefault != null)
                        {
                            cNamespace = firstOrDefault;
                        }
                        else
                        {
                            var oldN = cNamespace;
                            oldN.NestedNamespaces.Add(cNamespace = new CSNamespace
                            {
                                name = item
                            });
                        }
                    }
                }
                else
                {
                    newType = false;
                    int           pIndex     = line.IndexOf('(');
                    int           attIndex   = line.IndexOf('-');
                    Attributes    attributes = (Attributes)uint.Parse(line.Substring(attIndex + 1));
                    CSTypedMember member;
                    if (attributes.HasFlag(Attributes.Field) || attributes.HasFlag(Attributes.Property))
                    {
                        member = new CSField();
                    }
                    else if (attributes.HasFlag(Attributes.Method))
                    {
                        member = new CSMethod();
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                    member.Attributes = attributes;
                    string        name;
                    CSParameter[] parameters;
                    if (pIndex != -1)
                    {
                        name = line.Substring(0, pIndex);
                        var        cPindex   = line.IndexOf(')');
                        string     args      = line.Substring(pIndex + 1, cPindex - pIndex - 1);
                        string[][] argsSplit = Array.ConvertAll(args.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries), v => v.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                        ((CSMethod)member).Parameters = (parameters = Array.ConvertAll(argsSplit, v => new CSParameter
                        {
                            Name = v[1],
                            Type = v[0]
                        })).ToList();
                    }
                    else
                    {
                        name = line.Split(' ')[0];
                    }
                    member.Name = name;
                    int tIndex = line.IndexOf("=>");
                    if (tIndex != -1)
                    {
                        member.Type = line.Substring(tIndex + 3);
                    }
                    last.Members.Add(member);
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        static void DiffTypes(CSMemberedType bridgeType, CSMemberedType netType)
        {
            if (bridgeType == null || netType == null)
            {
                return;
            }
            HashSet <string> membersHash = new HashSet <string>();

            Dictionary <string, CSMember> MembersOf(CSMemberedType type)
            {
                string NameOf(CSMember member)
                {
                    CSMethod csMethod;

                    if ((csMethod = member as CSMethod) != null)
                    {
                        return(member.Name + "(" + string.Join(", ", csMethod.Parameters.ConvertAll(v2 => v2.Type)) + ")");
                    }
                    else
                    {
                        return(member.Name);
                    }
                }

                var dic = new Dictionary <string, CSMember>();

                foreach (var member in type.Members)
                {
                    var name = NameOf(member);
                    if (!dic.ContainsKey(name))
                    {
                        dic.Add(name, member);
                        membersHash.Add(name);
                    }
                }
                return(dic);
            }

            var bridgeMembers = MembersOf(bridgeType);
            var netMembers    = MembersOf(netType);

            writer.Write("<ul>");
            foreach (var @string in membersHash.OrderBy(v => v))
            {
                bool   inBridge         = bridgeMembers.ContainsKey(@string);
                bool   inNet            = netMembers.ContainsKey(@string);
                var    detectedProperty = inNet ? netMembers[@string] : bridgeMembers[@string];
                string icon;
                if (detectedProperty.Attributes.HasFlag(Attributes.Field))
                {
                    icon = "field";
                }
                else if (detectedProperty.Attributes.HasFlag(Attributes.Property))
                {
                    icon = "property";
                }
                else if (detectedProperty.Attributes.HasFlag(Attributes.Method))
                {
                    icon = "method";
                }
                else
                {
                    throw new NotImplementedException();
                }
                writer.Write("<li data-jstree='{\"icon\":\"dist/images/");
                writer.Write(icon);
                writer.Write(".png\"}'><span style=\"color:");
                CompareSupport(inBridge, inNet);
                writer.Write("\">");
                writer.Write(@string);
                writer.Write("</span>");
                if (inNet && inBridge)
                {
                    CompareAttributes(netMembers[@string].Attributes, bridgeMembers[@string].Attributes);
                }
                writer.Write("</li>");
            }
            writer.Write("</ul>");
        }