Ejemplo n.º 1
0
        private static TypeErrorsBuilder VerifyMemberRecursively(
            TypeErrorsBuilder typeErrors,
            Type type,
            MemberSettings settings,
            MemberPath memberPath,
            Func <MemberSettings, MemberPath, TypeErrors> getErrorsRecursively,
            MemberInfo memberInfo)
        {
            memberPath = memberPath.WithMember(memberInfo);
            if (memberPath.HasLoop())
            {
                if (settings.ReferenceHandling == ReferenceHandling.Throw)
                {
                    typeErrors = typeErrors.CreateIfNull(type)
                                 .Add(new ReferenceLoop(memberPath));
                }

                return(typeErrors);
            }

            var recursiveErrors = getErrorsRecursively(settings, memberPath);

            if (recursiveErrors == null)
            {
                return(typeErrors);
            }

            var memberErrors = new MemberErrors(memberPath, recursiveErrors);

            typeErrors = typeErrors.CreateIfNull(type)
                         .Add(memberErrors);
            return(typeErrors);
        }
Ejemplo n.º 2
0
            private static bool TryEquals(MemberErrors x, MemberErrors y, out bool result)
            {
                if (x == null || y == null)
                {
                    result = false;
                    return(false);
                }

                result = x.Member == y.Member;
                return(true);
            }
Ejemplo n.º 3
0
        private bool TryMerge(MemberErrors error)
        {
            if (error == null)
            {
                return(false);
            }

            var match = this.errors.OfType <MemberErrors>().SingleOrDefault(e => e.Member == error.Member);

            if (match != null)
            {
                this.errors.Remove(match);
                var mergedTypeErrors = match.Error.Merge(error.Error);
                var merged           = new MemberErrors(match.Path, mergedTypeErrors);
                this.errors.Add(merged);
                return(true);
            }

            this.errors.Add(error);
            return(true);
        }
Ejemplo n.º 4
0
        private static TypeErrorsBuilder VerifyMemberRecursively(
            TypeErrorsBuilder typeErrors,
            Type type,
            MemberSettings settings,
            MemberPath memberPath,
            Func<MemberSettings, MemberPath, TypeErrors> getErrorsRecursively,
            MemberInfo memberInfo)
        {
            memberPath = memberPath.WithMember(memberInfo);
            if (memberPath.HasLoop())
            {
                if (settings.ReferenceHandling == ReferenceHandling.Throw)
                {
                    typeErrors = typeErrors.CreateIfNull(type)
                                           .Add(new ReferenceLoop(memberPath));
                }

                return typeErrors;
            }

            var recursiveErrors = getErrorsRecursively(settings, memberPath);
            if (recursiveErrors == null)
            {
                return typeErrors;
            }

            var memberErrors = new MemberErrors(memberPath, recursiveErrors);
            typeErrors = typeErrors.CreateIfNull(type)
                                   .Add(memberErrors);
            return typeErrors;
        }