private static IEnumerable<string> CollectErrorsOnMemberAndDescendents(Module module, IEnumerable<Exemption> exemptions, Func<ICustomAttributeProvider, string, string, IEnumerable<Exemption>, IEnumerable<string>> coreChecker) {
var types = module.GetTypes().Where(type => !IsGeneratedCode(type));
return Enumerable.Concat(
coreChecker(module, module.Name, "module", exemptions),
types.SelectMany(type => CollectErrorsOnMemberAndDescendents(type, exemptions, coreChecker)));
}