public static bool CompareAssemblies(StreamWriter writer, string sourceFile, string targetFile, IgnoreSet ignoreSet) { using (var source = ReadModule(sourceFile)) using (var target = ReadModule(targetFile)) { writer.WriteLine($"## {Path.GetFileName(sourceFile)}"); var results = AssemblyComparer.CompareTypes(source, target); return(ReportAnalyzer.GenerateReport(writer, results, ignoreSet)); } }
private static bool ReportMissingTypes(StreamWriter writer, ComparisonResult results, IgnoreSet ignoreSet) { var shouldFail = false; writer.WriteLine("### {0} missing types:", results.InvalidTypes.Length); foreach (var invalidType in results.InvalidTypes) { var isIgnored = ignoreSet.Types .Select(t => t.FullName) .Contains(invalidType.ToSignature()); var strike = isIgnored ? "~~" : ""; if (!isIgnored) { Console.WriteLine($"Error : Removed type {invalidType.ToSignature()} not found in ignore set."); shouldFail = true; } writer.WriteLine($"* {strike}`{invalidType.ToSignature()}`{strike}"); } return(shouldFail); }
private static bool ReportFields(StreamWriter writer, ComparisonResult results, IgnoreSet ignoreSet, string[] ignoredTypeNames) { var shouldFail = false; var groupedFields = from method in results.InvalidFields group method by method.DeclaringType.FullName into types select types; writer.WriteLine("### {0} missing or changed fields in existing types:", results.InvalidFields.Length); foreach (var updatedType in groupedFields) { writer.WriteLine("- `{0}`", updatedType.Key); foreach (var field in updatedType) { var isIgnored = ignoreSet.Fields .Select(t => t.FullName) .Contains(field.ToSignature()) || IsDeclaringTypeIgnored(field, ignoredTypeNames); var strike = isIgnored ? "~~" : ""; if (!isIgnored) { Console.WriteLine($"Error : Removed field {field.ToSignature()} not found in ignore set."); shouldFail = true; } writer.WriteLine($"\t* {strike}``{field.ToSignature()}``{strike}"); } } return(shouldFail); }
public static bool GenerateReport(StreamWriter writer, ComparisonResult results, IgnoreSet ignoreSet) { var ignoredTypeNames = ignoreSet?.Types.Select(t2 => t2.FullName).ToArray(); var isFailed = false; isFailed |= ReportMissingTypes(writer, results, ignoreSet); isFailed |= ReportMethods(writer, results, ignoreSet, ignoredTypeNames); isFailed |= ReportEvents(writer, results, ignoreSet, ignoredTypeNames); isFailed |= ReportFields(writer, results, ignoreSet, ignoredTypeNames); isFailed |= ReportProperties(writer, results, ignoreSet, ignoredTypeNames); return(isFailed); }