protected override TypeDisplayData OnGetTypeDisplayData(EvaluationContext ctx, object gtype) { CorType type = (CorType)gtype; TypeDisplayData td = null; CorEvaluationContext wctx = (CorEvaluationContext)ctx; Type t = type.GetTypeInfo(wctx.Session); if (t == null) { return(null); } foreach (object att in t.GetCustomAttributes(false)) { DebuggerTypeProxyAttribute patt = att as DebuggerTypeProxyAttribute; if (patt != null) { if (td == null) { td = new TypeDisplayData(); } td.ProxyType = patt.ProxyTypeName; continue; } DebuggerDisplayAttribute datt = att as DebuggerDisplayAttribute; if (datt != null) { if (td == null) { td = new TypeDisplayData(); } td.NameDisplayString = datt.Name; td.TypeDisplayString = datt.Type; td.ValueDisplayString = datt.Value; continue; } } ArrayList mems = new ArrayList(); mems.AddRange(t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance)); mems.AddRange(t.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance)); foreach (MemberInfo m in mems) { object[] atts = m.GetCustomAttributes(typeof(DebuggerBrowsableAttribute), false); if (atts.Length == 0) { atts = m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), false); if (atts.Length > 0) { atts[0] = new DebuggerBrowsableAttribute(DebuggerBrowsableState.Never); } } if (atts.Length > 0) { if (td == null) { td = new TypeDisplayData(); } if (td.MemberData == null) { td.MemberData = new Dictionary <string, DebuggerBrowsableState> (); } td.MemberData[m.Name] = ((DebuggerBrowsableAttribute)atts[0]).State; } } return(td); }
protected override TypeDisplayData OnGetTypeDisplayData(EvaluationContext gctx, object type) { SoftEvaluationContext ctx = (SoftEvaluationContext)gctx; TypeDisplayData td = new TypeDisplayData(); try { TypeMirror t = (TypeMirror)type; foreach (CustomAttributeDataMirror attr in t.GetCustomAttributes(true)) { string attName = attr.Constructor.DeclaringType.FullName; if (attName == "System.Diagnostics.DebuggerDisplayAttribute") { DebuggerDisplayAttribute at = BuildAttribute <DebuggerDisplayAttribute> (attr); td.NameDisplayString = at.Name; td.TypeDisplayString = at.Type; td.ValueDisplayString = at.Value; } else if (attName == "System.Diagnostics.DebuggerTypeProxyAttribute") { DebuggerTypeProxyAttribute at = BuildAttribute <DebuggerTypeProxyAttribute> (attr); td.ProxyType = at.ProxyTypeName; if (!string.IsNullOrEmpty(td.ProxyType)) { ForceLoadType(ctx, td.ProxyType); } } } foreach (FieldInfoMirror fi in t.GetFields()) { CustomAttributeDataMirror[] attrs = fi.GetCustomAttributes(true); DebuggerBrowsableAttribute att = GetAttribute <DebuggerBrowsableAttribute> (attrs); if (att == null) { var cga = GetAttribute <System.Runtime.CompilerServices.CompilerGeneratedAttribute> (attrs); if (cga != null) { att = new DebuggerBrowsableAttribute(DebuggerBrowsableState.Never); } } if (att != null) { if (td.MemberData == null) { td.MemberData = new Dictionary <string, DebuggerBrowsableState> (); } td.MemberData [fi.Name] = att.State; } } foreach (PropertyInfoMirror pi in t.GetProperties()) { DebuggerBrowsableAttribute att = GetAttribute <DebuggerBrowsableAttribute> (pi.GetCustomAttributes(true)); if (att != null) { if (td.MemberData == null) { td.MemberData = new Dictionary <string, DebuggerBrowsableState> (); } td.MemberData [pi.Name] = att.State; } } } catch (Exception ex) { ctx.Session.WriteDebuggerOutput(true, ex.ToString()); } return(td); }