public virtual IEnumerator BackingFieldPath(IReflector reflector, object expression ) { if (expression == null) { return(null); } IReflectClass claxx = reflector.ForObject(expression); if (claxx == null) { return(null); } Prototypes.IntegerConverter converter = Prototypes.IntegerConverterforClassName(reflector , claxx.GetName()); if (converter != null) { Pair entry = (Pair)this._fieldsByIntId.Get(converter.ToInteger(expression)); if (entry == null) { return(null); } if (entry.first.Equals(expression)) { return(this.AsIterator((List4)entry.second)); } return(null); } if (claxx.IsPrimitive()) { return(null); } return(this.AsIterator((List4)this._fieldsByIdentity.Get(expression))); }
public void Apply(object field) { if (((IReflectField)field).IsStatic()) { return; } if (this._enclosing._enclosing._ignoreTransient && ((IReflectField)field).IsTransient ()) { return; } IReflectClass fieldType = ((IReflectField)field).GetFieldType(); List4 path = new List4(parentPath, ((IReflectField)field)); Prototypes.IntegerConverter converter = Prototypes.IntegerConverterforClassName(claxx .Reflector(), fieldType.GetName()); if (converter != null) { int id = ++this._enclosing.intIdGenerator; object integerRepresentation = converter.FromInteger(id); if (!Prototypes.TrySetField(((IReflectField)field), @object, integerRepresentation )) { return; } this._enclosing._fieldsByIntId.Put(id, new Pair(integerRepresentation, path)); return; } if (!fieldType.IsPrimitive()) { object identityInstance = fieldType.NewInstance(); if (identityInstance == null) { return; } if (!Prototypes.TrySetField(((IReflectField)field), @object, identityInstance)) { return; } this._enclosing._fieldsByIdentity.Put(identityInstance, path); this._enclosing.Analyze(identityInstance, claxx, depth - 1, path); } }