Esempio n. 1
0
        internal static void SelectDistinct(MetadataTokenId token, HashSet <MetadataTokenId> list,
                                            bool preserveDirectChildItems = false)
        {
            if (token == null)
            {
                return;
            }
            var iToken      = list.FirstOrDefault(x => x.Id == token.Id && x.RslvAsmIdx == token.RslvAsmIdx);
            var preExisting = iToken != null;

            iToken = iToken ?? new MetadataTokenId {
                Id = token.Id, RslvAsmIdx = token.RslvAsmIdx
            };
            if (!preExisting)
            {
                list.Add(iToken);
            }

            if (token.Items == null)
            {
                return;
            }

            if (preserveDirectChildItems)
            {
                var i2j = new HashSet <MetadataTokenId>();
                if (iToken.Items != null)
                {
                    foreach (var existingItem in iToken.Items)
                    {
                        if (existingItem.Equals(iToken))
                        {
                            continue;
                        }
                        i2j.Add(existingItem);
                    }
                }

                foreach (var ijToken in token.Items)
                {
                    if (ijToken.Equals(iToken))
                    {
                        continue;
                    }
                    i2j.Add(new MetadataTokenId {
                        Id = ijToken.Id, RslvAsmIdx = ijToken.RslvAsmIdx
                    });
                }
                if (i2j.Any())
                {
                    iToken.Items = i2j.ToArray();
                }
            }

            foreach (var jToken in token.Items)
            {
                SelectDistinct(jToken, list, preserveDirectChildItems);
            }
        }
Esempio n. 2
0
        public override string ToString()
        {
            var copy = new MetadataTokenId {
                Id = Id, IsByRef = IsByRef, RslvAsmIdx = RslvAsmIdx
            };

            return(JsonConvert.SerializeObject(copy));
        }
Esempio n. 3
0
        /// <summary>
        /// Returns a list of distinct <see cref="MetadataTokenId"/> having only their
        /// <see cref="RslvAsmIdx"/> and <see cref="Id"/> assigned.
        /// </summary>
        /// <param name="token"></param>
        /// <param name="preserveDirectChildItems">Retains the the direct children Items</param>
        /// <returns></returns>
        public static MetadataTokenId[] SelectDistinct(MetadataTokenId token, bool preserveDirectChildItems = false)
        {
            var list = new HashSet <MetadataTokenId>();

            if (token == null)
            {
                return(list.ToArray());
            }

            SelectDistinct(token, list, preserveDirectChildItems);
            return(list.ToArray());
        }
Esempio n. 4
0
        public static void SaveToFile(string filePath, MetadataTokenId rootTokenName)
        {
            if (rootTokenName?.Items == null || !rootTokenName.Items.Any())
            {
                return;
            }
            var json = JsonConvert.SerializeObject(rootTokenName, Formatting.None,
                                                   new JsonSerializerSettings {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            });

            File.WriteAllText(filePath, json);
        }
Esempio n. 5
0
        private static string Print(MetadataTokenId token, ref int currentDepth)
        {
            if (token == null)
            {
                return(string.Empty);
            }
            var strBldr = new StringBuilder();
            var tabs    = currentDepth <= 0 ? string.Empty : new string('\t', currentDepth);

            strBldr.AppendFormat("{0}{1}.{2}\n", tabs, token.RslvAsmIdx, token.Id.ToString("X4"));
            if (token.Items == null || token.Items.Length <= 0)
            {
                return(strBldr.ToString());
            }

            foreach (var tToken in token.Items)
            {
                currentDepth += 1;
                strBldr.Append(Print(tToken, ref currentDepth));
                currentDepth -= 1;
            }
            return(strBldr.ToString());
        }
Esempio n. 6
0
        /// <summary>
        /// Prints to token ids with <see cref="MetadataTokenId.RslvAsmIdx"/> prefixed to the front.
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public static string Print(MetadataTokenId token)
        {
            var depth = 0;

            return(Print(token, ref depth));
        }