private void ExpandAndSelectNode(BenchmarkTreeNode previousSelection) { List <BenchmarkTreeNode> previousPath = BuildPreviousPath(previousSelection); ObservableCollection <BenchmarkTreeNode> currentNodes = Nodes; for (int i = 0; i < previousPath.Count; i++) { BenchmarkTreeNode previousNode = previousPath[i]; var newNode = currentNodes.FirstOrDefault(c => c.NodeName == previousNode.NodeName); if (newNode == null) { return; } newNode.IsExpanded = true; if (i == previousPath.Count - 1) { newNode.IsSelected = true; SelectedBenchmark = newNode; } currentNodes = newNode.Nodes; } }
private BenchmarkTreeNode GetOrInsertNode(BenchmarkTreeNode parent, string nodeName, Func <BenchmarkTreeNode, BenchmarkTreeNode> createFunc) { int previousIndex = 0; foreach (var currentNode in parent.Nodes) { int comparisonResult = string.Compare(nodeName, currentNode.NodeName); if (comparisonResult == 0) { return(currentNode); } else if (comparisonResult < 0) { break; } previousIndex++; } var newNode = createFunc(parent); newNode.TreeViewModel = _treeViewModel; parent.Nodes.Insert(previousIndex, newNode); return(newNode); }
public BenchmarkTreeNode(BenchmarkTreeNode parent, string nodeName) { Parent = parent; NodeName = nodeName; Nodes = new ObservableCollection <BenchmarkTreeNode>(); RunSelectedCommand = new AsyncDelegateCommand(async() => await TreeViewModel.CommandHandler.RunAsync(false)); DryRunSelectedCommand = new AsyncDelegateCommand(async() => await TreeViewModel.CommandHandler.RunAsync(true)); GoToCodeCommand = new AsyncDelegateCommand(async() => await TreeViewModel.CommandHandler.GoToCodeAsync(Benchmark.Project, TargetSymbol), () => SupportsGoToCode); }
private void BuildNamespaceClassHierarchy(ObservableCollection <BenchmarkTreeNode> nodeList, ProjectBenchmarkTreeNode projectNode, Benchmark benchmark) { BenchmarkTreeNode lastNamespaceNode = projectNode; string[] namespaceParts = benchmark.Namespace.Split('.'); foreach (var namespacePart in namespaceParts) { lastNamespaceNode = GetOrInsertNode(lastNamespaceNode, namespacePart, p => CreateNamespaceNode(p, namespacePart)); } var classNode = GetOrInsertNode(lastNamespaceNode, benchmark.ClassName, p => CreateClassNode(p, benchmark)); GetOrInsertNode(classNode, benchmark.MethodName, p => CreateMethodNode(p, benchmark)); }
private static List <BenchmarkTreeNode> BuildPreviousPath(BenchmarkTreeNode previousSelection) { List <BenchmarkTreeNode> previousPath = new List <BenchmarkTreeNode>(); previousPath.Add(previousSelection); BenchmarkTreeNode current = previousSelection; while (current.Parent != null) { previousPath.Add(current.Parent); current = current.Parent; } previousPath.Reverse(); return(previousPath); }
public async Task RefreshAsync(IBenchmarkDiscoverer discoverer, Grouping grouping) { _discoveredBenchmarks.Clear(); var benchmarks = discoverer.FindBenchmarks().Select(b => { _discoveredBenchmarks.Add(b); return(b); }); BenchmarkTreeNode previousSelection = SelectedBenchmark; BenchmarkNodeBuilder nodeBuilder = new BenchmarkNodeBuilder(this, grouping); await nodeBuilder.RebuildNodesAsync(benchmarks); if (Nodes.Sum(n => n.TotalNodeCount) <= 20) { ExpandAll(); } if (previousSelection != null) { ExpandAndSelectNode(previousSelection); } }
private BenchmarkTreeNode CreateMethodNode(BenchmarkTreeNode parent, Benchmark benchmark) { return(new MethodBenchmarkTreeNode(parent, benchmark, benchmark.MethodName)); }
private BenchmarkTreeNode CreateClassNode(BenchmarkTreeNode parent, Benchmark benchmark) { return(new ClassBenchmarkTreeNode(parent, benchmark, benchmark.ClassName)); }
private BenchmarkTreeNode CreateCategoryNode(BenchmarkTreeNode parent, string category) { return(new CategoryBenchmarkTreeNode(parent, category)); }
private BenchmarkTreeNode CreateNamespaceNode(BenchmarkTreeNode parent, string namespacePart) { return(new NamespaceBenchmarkTreeNode(parent, namespacePart)); }
public MethodBenchmarkTreeNode(BenchmarkTreeNode parent, Benchmark benchmark, string methodName) : base(parent, methodName) { _benchmark = benchmark; Parent?.IncrementChildNodeCount(); }
public ClassBenchmarkTreeNode(BenchmarkTreeNode parent, Benchmark benchmark, string className) : base(parent, className) { _benchmark = benchmark; }
public CategoryBenchmarkTreeNode(BenchmarkTreeNode parent, string categoryName) : base(parent, categoryName) { }
public NamespaceBenchmarkTreeNode(BenchmarkTreeNode parent, string namespaceName) : base(parent, namespaceName) { }