public static SourceAnnotationInfo TryGetSourceInfo( [NotNull] Target target, [NotNull] IMessageLogger messageLogger) { SourceAnnotationInfo result = null; try { // ReSharper disable once PossibleNullReferenceException var reader = GetReader(target.Method.DeclaringType.Module); result = TryGetSourceInfoCore(target, reader, messageLogger); if (result == null) { messageLogger.WriteSetupErrorMessage( target, "No PDB data available.", $"Ensure that there is actual pdb file for the assembly '{target.Method.DeclaringType?.Module.GetModulePath()}'."); } } catch (COMException ex) { messageLogger.WriteExceptionMessage( MessageSeverity.ExecutionError, target, "Could not parse method symbols.", ex); } return(result); }
private static bool TryValidate(SourceAnnotationInfo documentInfo, IMessageLogger messageLogger) { bool result = true; if (documentInfo.SourceLanguage != SourceLanguage.CSharp) { messageLogger.WriteSetupErrorMessage( $"Document language {documentInfo.SourceLanguage} is unsupported. File '{documentInfo.Path}'."); result = false; } if (documentInfo.MethodLinesMap.IsEmpty) { // TODO: improve message messageLogger.WriteSetupErrorMessage( $"No methods found in document '{documentInfo.Path}'."); result = false; } if (!documentInfo.MethodLinesMap.IsMerged) { var methodsIntersection = documentInfo.MethodLinesMap .GetIntersections() .FirstOrDefault(i => i.Ranges.Count > 1); DebugCode.BugIf(methodsIntersection.IsEmpty, "methodsIntersection.IsEmpty"); var methodNames = methodsIntersection.Ranges.Select(r => r.Key.Name).Join(", "); // TODO: improve message messageLogger.WriteSetupErrorMessage( $"Some of methods in document share same source lines {methodsIntersection.IntersectionRange}: " + $"{methodNames}. Document '{documentInfo.Path}'."); result = false; } var symbolsChecksum = documentInfo.Checksum; var fileChecksum = AnnotationHelpers.TryGetChecksum(documentInfo.Path, documentInfo.ChecksumAlgorithm); if (!symbolsChecksum.EqualsTo(fileChecksum)) { var expected = symbolsChecksum.ToHexString(); var actual = fileChecksum.ToHexString(); messageLogger.WriteSetupErrorMessage( $"{ChecksumAlgorithm.Sha1} checksum validation failed. File '{documentInfo.Path}'." + $"{Environment.NewLine}\tActual: 0x{actual}" + $"{Environment.NewLine}\tExpected: 0x{expected}"); result = false; } return(result); }