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 }); }
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); } } }