private bool AssemblyIsValid() => Wrappers.DoSafe(() => { var properties = GetAllProperties(); var apiMethodAnnotatedProperties = properties .Where(p => p.GetCustomAttributes <ApiRequestProcessorAttribute>().Any()) .ToList(); if (!apiMethodAnnotatedProperties.Any()) { LogWarning("Assembly does not contain any annotated API members, failed to generate docs"); return(false); } var staticRequestProcessorProperties = properties .Where(p => p.GetGetMethod().IsStatic && p.ExtendsOrImplements <IRequestProcessor>()) .ToList(); var incorrectAnnotatedProperties = apiMethodAnnotatedProperties .Except(staticRequestProcessorProperties) .ToList(); if (incorrectAnnotatedProperties.Any()) { var incorrectAnnotatedPropertiesDescription = string.Join("\n", incorrectAnnotatedProperties.Select( p => $"{p.PropertyType.GetGenericArguments().First().FullName}.{p.Name}")); LogWarning( $"The following properties are annotated as API members but do not implement IRequestProcessor:\n{incorrectAnnotatedPropertiesDescription}"); return(false); } _apiMemberPropertyInfos = apiMethodAnnotatedProperties; return(true); });
private bool WriteAllSections() => Wrappers.DoSafe(() => { var sections = SplitSections(_apiMemberPropertyInfos); foreach (var section in sections) { WriteOneSection(section); _builder.AppendLine(SectionSeparatorPattern); } return(true); });
private bool TryLoadTargetAssembly(Type markerType) => Wrappers.DoSafe(() => { _targetAssembly = Assembly.GetAssembly(markerType); LogDebug($"Assembly {_targetAssembly.FullName} loaded"); return(true); });