Example #1
0
            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));
            }
Example #2
0
            // 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);
            }
Example #3
0
 private ParserDiscoveryProxy(ParserDiscoveryProxy proxy)
 {
     CurrentParent   = proxy.CurrentParent;
     TraversedType   = new HashSet <Type>(proxy.TraversedType, proxy.TraversedType.Comparer);
     ThrowOnCircular = proxy.ThrowOnCircular;
 }