private static MultiElementDictionary<string, Func<IFieldData>> GetObjectFields(IClrTypeDecorator type, ulong objRef, bool isInterior)
		{
			var objectFields = new MultiElementDictionary<string, Func<IFieldData>>();
			bool interior = !type.IsObjectReference;

			if (isInterior)
			{
				interior = false;
			}

			foreach (var field in type.Fields)
			{
				string fieldName = field.Name;
				ClrInstanceFieldDecorator fieldRef = field;
				objectFields.Add(fieldName, () => GetFieldData(type, objRef, fieldRef, interior, fieldName));
			}

			return objectFields;
		}
Ejemplo n.º 2
0
		private IEnumerable<ITypeNode> GetTypeHierarchy(IEnumerable<string> names, uint level)
		{
			var nextLevelElements = new MultiElementDictionary<string, string>();
			foreach (string name in names)
			{
				var type = name;
				if (type.IsLastSubNamespace(level) || type.IsLastSubNamespace(0))
				{
					yield return new TypeLeaf { Name = name, Instances = GetHeapObjects(name) };
				}
				else
				{
					nextLevelElements.Add(name.GetSubNamespace(level), name);
				}
			}

			foreach (var keyValuePair in nextLevelElements.GetDictionary())
			{
				yield return GetTypeHierarchy(level, keyValuePair.Key, keyValuePair.Value);
			}
		}