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); }
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); }
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); }
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; }