private static string DumpPreventRecursion(object obj, IdentitySet4 dumped, int stackLimit ) { stackLimit--; if (obj == null) { return("null"); } var clazz = obj.GetType(); if (Platform4.IsSimple(clazz)) { return(obj.ToString()); } var sb = new StringBuilder(); sb.Append(clazz.FullName); sb.Append(" ("); sb.Append(Runtime.IdentityHashCode(obj)); sb.Append(")"); if (dumped.Contains(obj) || stackLimit <= 0) { return(sb.ToString()); } dumped.Add(obj); var fields = Runtime.GetDeclaredFields(clazz); for (var fieldIndex = 0; fieldIndex < fields.Length; ++fieldIndex) { var field = fields[fieldIndex]; Platform4.SetAccessible(field); try { if (field.GetValue(null) == field.GetValue(obj)) { continue; } } catch (Exception) { } // static field.getModifiers() wouldn't sharpen sb.Append("\n"); sb.Append("\t"); sb.Append(field.Name); sb.Append(": "); try { sb.Append(DumpPreventRecursion(field.GetValue(obj), dumped, stackLimit)); } catch (Exception e) { sb.Append("Exception caught: "); sb.Append(e); } } return(sb.ToString()); }
public static FieldInfo GetField(Type clazz, string name) { Type curclazz = clazz; while (curclazz != null) { try { FieldInfo field = Sharpen.Runtime.GetDeclaredField(curclazz, name); Platform4.SetAccessible(field); if (field != null) { return(field); } } catch (Exception) { } curclazz = curclazz.BaseType; } return(null); }
/// <exception cref="Db4objects.Db4o.Internal.ReflectException"></exception> public static object Invoke(object[] @params, object onObject, MethodInfo method) { if (method == null) { return(null); } Platform4.SetAccessible(method); try { return(method.Invoke(onObject, @params)); } catch (TargetInvocationException e) { throw new ReflectException(e.InnerException); } catch (ArgumentException e) { throw new ReflectException(e); } catch (MemberAccessException e) { throw new ReflectException(e); } }