Пример #1
0
        public void LookupTypes(IEnumerable <Assembly> assemblies)
        {
            foreach (var assembly in assemblies)
            {
#if !SILVERLIGHT
                var referencedAssemblies = assembly.GetReferencedAssemblies();
                if (ShouldProcess(assembly.GetName()) == false && referencedAssemblies.Any(ShouldProcess) == false)
                {
                    continue;
                }
#endif
                var pathToRoot = new Stack <Type>();
                // ReSharper disable AssignNullToNotNullAttribute
                foreach (var type in assembly.GetLoadableTypes().Where(t => t.IsSubclassOf(_rootType)))
                {
                    if (_treeItemMap.ContainsKey(type))
                    {
                        continue;
                    }

                    var current = type;

                    pathToRoot.Push(current);

                    while (true)
                    {
                        TypeTreeItem parentTreeItem;

                        current = current.BaseType;

                        if (_treeItemMap.TryGetValue(current, out parentTreeItem))
                        {
                            break;
                        }

                        pathToRoot.Push(current);
                    }

                    while (pathToRoot.Count > 0)
                    {
                        var peek = pathToRoot.Pop();
                        _treeItemMap[peek] = new TypeTreeItem(peek, _treeItemMap[current]);
                        current            = peek;
                    }
                }
                // ReSharper restore AssignNullToNotNullAttribute
            }
        }
Пример #2
0
 public TypeTree(Type rootType)
 {
     _rootType               = rootType;
     _rootTypeAssembly       = new AssemblyName(_rootType.Assembly.FullName);
     _treeItemMap[_rootType] = new TypeTreeItem();
 }
Пример #3
0
 public TypeTreeItem(Type type, TypeTreeItem baseType)
 {
     Type     = type;
     BaseType = baseType;
     BaseType.DerivedTypesInt.Add(this);
 }