From f835291cb61e2aed747d7339070f6e2600fe27d8 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Tue, 16 Oct 2018 15:31:15 -0700 Subject: [PATCH] Allow identical DocumentSnapshot sources to trigger output changes. - Prior to this project changes would trigger re-parses which would then be thrown away because source versions were identical. - Added test to verify new SetOutput behavior. aspnet/Razor.VSCode#184 --- .../ProjectSystem/GeneratedCodeContainer.cs | 4 ++- .../GeneratedCodeContainerTest.cs | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/GeneratedCodeContainer.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/GeneratedCodeContainer.cs index 1694071578..aaae99fd2b 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/GeneratedCodeContainer.cs +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/GeneratedCodeContainer.cs @@ -106,7 +106,9 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem return; } - if (_sourceVersion.HasValue && _sourceVersion == SourceVersion.GetNewerVersion(version)) + if (_sourceVersion.HasValue && + _sourceVersion != version && + _sourceVersion == SourceVersion.GetNewerVersion(version)) { // Latest document is newer than the provided document. return; diff --git a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/GeneratedCodeContainerTest.cs b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/GeneratedCodeContainerTest.cs index 4056e6560d..bb562eff1f 100644 --- a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/GeneratedCodeContainerTest.cs +++ b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/GeneratedCodeContainerTest.cs @@ -11,6 +11,31 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem { public class GeneratedCodeContainerTest { + [Fact] + public void SetOutput_AcceptsSameVersionedDocuments() + { + // Arrange + var csharpDocument = RazorCSharpDocument.Create("...", RazorCodeGenerationOptions.CreateDefault(), Enumerable.Empty()); + var hostProject = new HostProject("C:/project.csproj", RazorConfiguration.Default); + var services = TestWorkspace.Create().Services; + var projectState = ProjectState.Create(services, hostProject); + var project = new DefaultProjectSnapshot(projectState); + var hostDocument = new HostDocument("C:/file.cshtml", "C:/file.cshtml"); + var text = SourceText.From("..."); + var textAndVersion = TextAndVersion.Create(text, VersionStamp.Default); + var documentState = new DocumentState(services, hostDocument, text, VersionStamp.Default, () => Task.FromResult(textAndVersion)); + var document = new DefaultDocumentSnapshot(project, documentState); + var newDocument = new DefaultDocumentSnapshot(project, documentState); + var container = new GeneratedCodeContainer(); + container.SetOutput(csharpDocument, document); + + // Act + container.SetOutput(csharpDocument, newDocument); + + // Assert + Assert.Same(newDocument, container.LatestDocument); + } + [Fact] public void SetOutput_AcceptsInitialOutput() {