public DependencyBrowserWindowViewModel(IEnumerable<AssemblyInfo> assemblies)
        {
            _assemblies = assemblies.ToList();
            var inputAssemblyViewModels = assemblies
                .Select(a => AssemblyViewModel.Create(a))
                .ToList();
            foreach (var vm in inputAssemblyViewModels)
            {
                vm.IsMarked = true;
                vm.IsRoot = true;
            }
            _assemblyGraph = CreateGraph(inputAssemblyViewModels);
            _assemblyViewModels = _assemblyGraph.Vertices.ToList();

            HideSearchCommand = new DelegateCommand(HideSearchCommandHandler);
            ShowSearchCommand = new DelegateCommand(ShowSearchCommandHandler);
            BrowseSelectedCommand = new DelegateCommand(BrowseCommandHandler);
            ClearSelectionCommand = new DelegateCommand(ClearSelectionCommandHandler);
            RemoveSelectedCommand = new DelegateCommand(RemoveSelectedCommandHandler);
            Commands = new ObservableCollection<UserCommand>
                       	{
                       		new UserCommand(Resources.FillGraph, OnFillGraphRequest),
                       		new UserCommand(Resources.OriginalSize, OnOriginalSizeRequest),
                            new UserCommand(Resources.SearchInGraph, ShowSearchCommand),
                            new UserCommand(Resources.BrowseSelected, BrowseSelectedCommand),
                            new UserCommand(Resources.RemoveSelected, RemoveSelectedCommand),
                            new UserCommand(Resources.ClearSelection, ClearSelectionCommand)
                       	};
        }
 internal static Assembly ToAssembly(this AssemblyGraph assembly)
 {
     return(new Assembly
     {
         Name = assembly.name,
         ShortName = assembly.shortName,
         IsNative = assembly.isNative,
         Version = assembly.version,
         CreationDate = assembly.creationDate.ToDateTime(),
         Creator = assembly.creator,
         IsDebug = assembly.isDebug,
         IsILOnly = assembly.isILOnly,
         TargetFramework = assembly.targetFramework,
         TargetProcessor = assembly.targetProcessor,
         IsPartial = assembly.isPartial ?? false,
         HasEntryPoint = assembly.hasEntryPoint ?? false
     });
 }
Esempio n. 3
0
 public GraphManager(string path)
 {
     //Create graphs from source assembly
     sourceAssembly = Assembly.LoadFrom(path);
     _graph         = new AssemblyGraph(sourceAssembly);
 }
        private static AssemblyGraph CreateGraph(IEnumerable<AssemblyViewModel> assemblies)
        {
            var graph = new AssemblyGraph(true);

            foreach (var assembly in assemblies)
            {
                if (!graph.ContainsVertex(assembly))
                {
                    graph.AddVertex(assembly);
                }
                AddReferencesRecursive(graph, assembly);
            }

            AssemblyViewModel.ClearCache();
            return graph;
        }
        private static void AddReferencesRecursive(AssemblyGraph graph, AssemblyViewModel assembly)
        {
            assembly.IsProcessed = true;
            foreach (var refAssembly in assembly.ReferencedAssemblies)
            {
                if (!graph.ContainsVertex(refAssembly))
                {
                    graph.AddVertex(refAssembly);
                }

                var edge = new Edge<AssemblyViewModel>(assembly, refAssembly);

                Edge<AssemblyViewModel> reverseEdge;
                var result = graph.TryGetEdge(refAssembly, assembly, out reverseEdge);
                if (result)
                {
                    reverseEdge.IsTwoWay = true;
                    edge.IsTwoWay = true;
                }

                graph.AddEdge(edge);
                if (!refAssembly.IsProcessed)
                {
                    AddReferencesRecursive(graph, refAssembly);
                }
            }
        }