public TypeParser <T> GetParser <T>() { var nextProxy = new ParserDiscoveryProxy(this); var locateType = typeof(T); if (!nextProxy.TraversedType.Add(locateType)) { throw DetectedCircularException(locateType); } return(CurrentParent.GetParser <T>(nextProxy)); }
// TODO : Should the circularschemareference throw here too? and not silently fail? public bool TryGetParser <T>(out TypeParser <T> parser) { parser = null; var nextProxy = new ParserDiscoveryProxy(this); var locateType = typeof(T); if (nextProxy.TraversedType.Add(locateType)) { return(CurrentParent.TryGetParser(nextProxy, out parser)); } if (ThrowOnCircular) { throw DetectedCircularException(locateType); } return(false); }
private ParserDiscoveryProxy(ParserDiscoveryProxy proxy) { CurrentParent = proxy.CurrentParent; TraversedType = new HashSet <Type>(proxy.TraversedType, proxy.TraversedType.Comparer); ThrowOnCircular = proxy.ThrowOnCircular; }