コード例 #1
0
        private ReferrerTreeNode CreateChildNode(IReadOnlyList <ReferenceGraphNode> backingItems, ClrType referrerType, int fieldOffset, List <FieldReference> referrerChain, bool isCycle)
        {
            string scope;
            string name;

            var match = _typeNameRegex.Match(referrerType.Name);

            if (match.Success)
            {
                scope = match.Groups["scope"].Value;
                name  = match.Groups["name"].Value;
            }
            else
            {
                scope = null;
                name  = referrerType.Name;
            }

            var fieldChain = FieldReference.DescribeFieldReferences(referrerChain);

            if (fieldChain.Length != 0)
            {
                fieldChain = "." + fieldChain;
            }

            return(new ReferrerTreeNode(this, backingItems, scope, name, fieldChain, referrerType, fieldOffset, referrerChain, isCycle, false, ReferrerTreeNodeType.FieldReference));
        }
コード例 #2
0
        public ReferrersPage(MainWindow mainWindow, ReferrerTreeViewModel referrerTree, HeapAnalyzer analyzer, string headerText)
        {
            ReferrerTree = referrerTree ?? throw new ArgumentNullException(nameof(referrerTree));
            HeaderText   = headerText;

            _analyzerLease = analyzer.GetLease();

            ShowStringReferencedByFieldCommand = new DelegateCommand <ReferrerTreeNode>(ShowStringReferencedByField);

            void ShowStringReferencedByField(ReferrerTreeNode node)
            {
                var title = $"Refs of {FieldReference.DescribeFieldReferences(node.ReferrerChain)}";

                var operation = new LoadingOperation(
                    (progressCallback, token) =>
                {
                    var summary = analyzer.GetTypeReferenceStringSummary(node.ReferrerType, node.FieldOffset);

                    var description = $"Strings referenced by field {FieldReference.DescribeFieldReferences(node.ReferrerChain)} of type {node.ReferrerType.Name}";

                    return(new StringListPage(mainWindow, summary, analyzer, title, description));
                });

                mainWindow.AddTab(new LoadingTabPage(title, StringListPage.IconDrawingBrush, operation));
            }
        }