public TreeNode GetCalleeTreeNode(string name, string path = "") { lock (this.lockobj) { CallTreeNodeBase node = this.GetNode(name).BackingNode; TreeNode calleeTreeNode; if (this.calleeTreeCache.ContainsKey(node)) { calleeTreeNode = this.calleeTreeCache[node]; } else { calleeTreeNode = new TreeNode(AggregateCallTreeNode.CalleeTree(node)); this.calleeTreeCache.Add(node, calleeTreeNode); } if (string.IsNullOrEmpty(path)) { return(calleeTreeNode); } var pathArr = path.Split('/'); var pathNodeRoot = calleeTreeNode.Children[int.Parse(pathArr[0])]; for (int i = 1; i < pathArr.Length; ++i) { pathNodeRoot = pathNodeRoot.Children[int.Parse(pathArr[i])]; } return(pathNodeRoot); } }
public async ValueTask <TreeNode> GetCalleeTreeNode(string name, string path = "") { if (name == null) { ThrowHelper.ThrowArgumentNullException(nameof(name)); } await this.EnsureInitialized(); var t = this.tuple; var node = this.GetNodeInner(name, t); lock (this.lockObj) { CallTreeNodeBase backingNode = node.BackingNode; TreeNode calleeTreeNode; var c = t.CalleeTreeCache; if (c.ContainsKey(backingNode)) { calleeTreeNode = c[backingNode]; } else { calleeTreeNode = new TreeNode(AggregateCallTreeNode.CalleeTree(backingNode)); c.Add(backingNode, calleeTreeNode); } if (string.IsNullOrEmpty(path)) { return(calleeTreeNode); } var pathArr = path.Split('/'); var pathNodeRoot = calleeTreeNode.Children[int.Parse(pathArr[0])]; for (int i = 1; i < pathArr.Length; ++i) { pathNodeRoot = pathNodeRoot.Children[int.Parse(pathArr[i])]; } return(pathNodeRoot); } }
/// <summary> /// Get the set of callee nodes for a specified symbol. /// </summary> /// <param name="symbolName">The symbol.</param> public CallTreeNode GetCallees(string symbolName) { var focusNode = FindNodeByName(symbolName); return(AggregateCallTreeNode.CalleeTree(focusNode)); }