public async Task <bool> Equals(IVisualStudioProjectFile x, IVisualStudioProjectFile y, IMessageSink messageSink) { var areEqual = true; var generateDocumentationFileAreEqual = await this.CompareSettable(x.GenerateDocumentationFile, y.GenerateDocumentationFile, messageSink, nameof(x.GenerateDocumentationFile)); areEqual &= generateDocumentationFileAreEqual; var isPackableAreEqual = await this.CompareSettable(x.IsPackable, y.IsPackable, messageSink, nameof(x.IsPackable)); areEqual &= isPackableAreEqual; var languageVersionAreEqual = await this.CompareSettable(x.LanguageVersion, y.LanguageVersion, messageSink, nameof(x.LanguageVersion)); areEqual &= languageVersionAreEqual; var noWarnAreEqual = await this.CompareSettable(x.NoWarn, y.NoWarn, messageSink, nameof(x.NoWarn)); areEqual &= noWarnAreEqual; var outputTypeAreEqual = await this.CompareSettable(x.OutputType, y.OutputType, messageSink, nameof(x.OutputType)); areEqual &= outputTypeAreEqual; var sdkAreEqual = await this.CompareSettable(x.SDK, y.SDK, messageSink, nameof(x.SDK)); areEqual &= sdkAreEqual; var targetFrameworkAreEqual = await this.CompareSettable(x.TargetFramework, y.TargetFramework, messageSink, nameof(x.TargetFramework)); areEqual &= targetFrameworkAreEqual; var packageReferenceComparisonMessageRepository = new InMemoryMessageRepository(); var packageReferencesEqual = await x.PackageReferences.SequenceEqualAsync(y.PackageReferences, DefaultIPackageReferenceEqualityComparer.Instance, this.NowUtcProvider, packageReferenceComparisonMessageRepository, false); if (!packageReferencesEqual) { await messageSink.AddErrorMessageAsync(this.NowUtcProvider, "Package references not equal."); await messageSink.CopyFromAsync(packageReferenceComparisonMessageRepository); } areEqual &= packageReferencesEqual; var projectReferenceComparisonMessageRepository = new InMemoryMessageRepository(); var projectReferencesEqual = await x.ProjectReferences.SequenceEqualAsync(y.ProjectReferences, DefaultProjectReferenceEqualityComparer.Instance, this.NowUtcProvider, projectReferenceComparisonMessageRepository); if (!projectReferencesEqual) { await messageSink.AddErrorMessageAsync(this.NowUtcProvider, "Project references not equal."); await messageSink.CopyFromAsync(packageReferenceComparisonMessageRepository); } areEqual &= projectReferencesEqual; return(areEqual); }
public static async Task <bool> SetEqualAsync <T>(this IEnumerable <T> x, IEnumerable <T> y, IEqualityComparer <T> equalityComparer, INowUtcProvider nowUtcProvider, IMessageSink messageSink) { async Task MessageHandler(string message) { await messageSink.AddErrorMessageAsync(nowUtcProvider, message); } var result = await x.SetEqualAsync(y, equalityComparer, MessageHandler); return(result); }
public static async Task <bool> SequenceEqualAsync <T>(this IEnumerable <T> x, IEnumerable <T> y, IEqualityComparer <T> equalityComparer, INowUtcProvider nowUtcProvider, IMessageSink messageSink, bool stopAtFirstElementDifference = true) { async Task MessageHandler(string message) { await messageSink.AddErrorMessageAsync(nowUtcProvider, message); } var result = await x.SequenceEqualAsync(y, equalityComparer, MessageHandler, stopAtFirstElementDifference); return(result); }
private async Task ReportError(string message, IMessageSink messageSink) { var nowUtc = await this.NowUtcProvider.GetNowUtcAsync(); await messageSink.AddErrorMessageAsync(nowUtc, message); if (this.VisualStudioProjectFileDeserializationSettings.ThrowAtErrorOccurrence) { throw new Exception(message); } }
private async Task <bool> TargetFrameworkIsSet(ProjectFile projectFile, IMessageSink messageSink) { var result = projectFile.TargetFramework.IsSet; if (!result) { var message = "TargetFramework was not set."; await messageSink.AddErrorMessageAsync(this.NowUtcProvider, message); } return(result); }
private async Task <bool> CompareSettable <T>(Settable <T> settableX, Settable <T> settableY, IMessageSink messageSink, string propertyName) { var areEqual = settableX == settableY; if (!areEqual) { var message = $"{propertyName} values are not equal:\nX:{settableX}\nY:{settableY}"; await messageSink.AddErrorMessageAsync(this.NowUtcProvider, message); } return(areEqual); }
private async Task ReportErrors(IEnumerable <string> messages, IMessageSink messageSink) { var nowUtc = await this.NowUtcProvider.GetNowUtcAsync(); foreach (var message in messages) { await messageSink.AddErrorMessageAsync(nowUtc, message); } if (this.VisualStudioProjectFileDeserializationSettings.ThrowAtErrorOccurrence) { throw new Exception("There were errors."); } }
private async Task ValidateProjectFileAsync(ProjectFile projectFile, IMessageSink messageSink) { var isValidProjectFile = await this.VisualStudioProjectFileValidator.Validate(projectFile, messageSink); if (!isValidProjectFile) { var timestampUtc = await this.NowUtcProvider.GetNowUtcAsync(); await messageSink.AddErrorMessageAsync(timestampUtc, "Project file invalid."); if (this.VisualStudioProjectFileDeserializationSettings.ThrowIfInvalidProjectFile) { throw new Exception("Invalid project file."); } } }