From 18e1ac5b7078b38eac51126ba86d46fce70a275f Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 09:36:06 -0700 Subject: [PATCH 01/15] Remove unnecessary references to TagHelperDescriptorJsonConverter in benchmarks --- .../RazorLanguageServerBenchmarkBase.cs | 2 +- .../ProjectSnapshotManagerBenchmarkBase.cs | 15 ++------------- .../Serialization/MemoryCacheBenchmark.cs | 14 ++------------ 3 files changed, 5 insertions(+), 26 deletions(-) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs index bc1d025dca5..ba59360c1b2 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs @@ -59,7 +59,7 @@ internal IDocumentSnapshot GetDocumentSnapshot(string projectFilePath, string fi var projectSnapshotManager = CreateProjectSnapshotManager(); projectSnapshotManager.ProjectAdded(hostProject); - var tagHelpers = GetTagHelperDescriptors(); + var tagHelpers = CommonResources.LegacyTagHelpers; var projectWorkspaceState = new ProjectWorkspaceState(tagHelpers, CodeAnalysis.CSharp.LanguageVersion.CSharp11); projectSnapshotManager.ProjectWorkspaceStateChanged(projectFilePath, projectWorkspaceState); projectSnapshotManager.DocumentAdded(hostProject, hostDocument, textLoader); diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs index e24ac47f59d..0385fbf02a0 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs @@ -63,19 +63,8 @@ protected ProjectSnapshotManagerBenchmarkBase() Documents = documents.ToImmutable(); - TagHelperResolver = new StaticTagHelperResolver(GetTagHelperDescriptors(), NoOpTelemetryReporter.Instance); - } - - internal IReadOnlyList GetTagHelperDescriptors() - { - var tagHelperBuffer = Resources.GetResourceBytes("taghelpers.json"); - - var serializer = new JsonSerializer(); - serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); - using var stream = new MemoryStream(tagHelperBuffer); - using var reader = new JsonTextReader(new StreamReader(stream)); - - return serializer.Deserialize>(reader) ?? Array.Empty(); + var tagHelpers = CommonResources.LegacyTagHelpers; + TagHelperResolver = new StaticTagHelperResolver(tagHelpers, NoOpTelemetryReporter.Instance); } internal DefaultProjectSnapshotManager CreateProjectSnapshotManager() diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs index 763c9e0a159..351faade347 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs @@ -2,12 +2,10 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System.Collections.Generic; -using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; -using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization; @@ -24,16 +22,8 @@ public class MemoryCacheBenchmark [GlobalSetup] public void Setup() { - var tagHelperBuffer = Resources.GetResourceBytes("taghelpers.json"); - - // Deserialize from json file. - var serializer = new JsonSerializer(); - serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); - using var stream = new MemoryStream(tagHelperBuffer); - using var reader = new JsonTextReader(new StreamReader(stream)); - - _tagHelpers = serializer.Deserialize>(reader).AssumeNotNull(); - _tagHelperHashes = TagHelpers.Select(th => th.GetHashCode()).ToList(); + _tagHelpers = CommonResources.LegacyTagHelpers; + _tagHelperHashes = TagHelpers.Select(th => th.GetHashCode()).ToArray(); // Set cache size to 400 so anything more then that will force compacts _cache = new MemoryCache(400); From 53096e64f5482b2b0f613c3fc8344a14b832e84f Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 09:51:03 -0700 Subject: [PATCH 02/15] Move TagHelperDeltaResult to ProjectEngineHost and introduce JsonConverter for it --- .../JsonConverterCollectionExtensions.cs | 1 + .../Serialization/JsonDataWriter.cs | 7 +++- .../Serialization/ObjectWriters.cs | 6 ++-- .../Serialization}/TagHelperDeltaResult.cs | 2 +- .../TagHelperDeltaResultJsonConverter.cs | 33 +++++++++++++++++++ .../RemoteTagHelperDeltaProvider.cs | 1 + .../RemoteTagHelperDeltaProviderTest.cs | 2 -- .../TagHelperDeltaResultTest.cs | 3 +- 8 files changed, 46 insertions(+), 9 deletions(-) rename src/Razor/src/{Microsoft.CodeAnalysis.Remote.Razor => Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization}/TagHelperDeltaResult.cs (95%) create mode 100644 src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs index dd827329929..45f7bf36ba0 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs @@ -13,6 +13,7 @@ internal static class JsonConverterCollectionExtensions { TagHelperDescriptorJsonConverter.Instance, TagHelperResolutionResultJsonConverter.Instance, + TagHelperDeltaResultJsonConverter.Instance, ProjectRazorJsonJsonConverter.Instance, }; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs index 92726dc3aad..ab5e3587996 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs @@ -79,7 +79,12 @@ public void Write(string propertyName, int value) _writer.WriteValue(value); } - public void WriteIfNotDefault(string propertyName, int value, int defaultValue = default) + public void WriteIfNotZero(string propertyName, int value) + { + WriteIfNotDefault(propertyName, value, defaultValue: 0); + } + + public void WriteIfNotDefault(string propertyName, int value, int defaultValue) { if (value != defaultValue) { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs index 70fde19b012..c0a6dd1791a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs @@ -129,7 +129,7 @@ static void WriteTagMatchingRule(JsonDataWriter writer, TagMatchingRuleDescripto { writer.Write(nameof(value.TagName), value.TagName); writer.WriteIfNotNull(nameof(value.ParentTag), value.ParentTag); - writer.WriteIfNotDefault(nameof(value.TagStructure), (int)value.TagStructure); + writer.WriteIfNotZero(nameof(value.TagStructure), (int)value.TagStructure); writer.WriteArrayIfNotNullOrEmpty(nameof(value.Attributes), value.Attributes, WriteRequiredAttribute); writer.WriteArrayIfNotNullOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); }); @@ -140,9 +140,9 @@ static void WriteRequiredAttribute(JsonDataWriter writer, RequiredAttributeDescr writer.WriteObject(value, static (writer, value) => { writer.Write(nameof(value.Name), value.Name); - writer.WriteIfNotDefault(nameof(value.NameComparison), (int)value.NameComparison); + writer.WriteIfNotZero(nameof(value.NameComparison), (int)value.NameComparison); writer.WriteIfNotNull(nameof(value.Value), value.Value); - writer.WriteIfNotDefault(nameof(value.ValueComparison), (int)value.ValueComparison); + writer.WriteIfNotZero(nameof(value.ValueComparison), (int)value.ValueComparison); writer.WriteArrayIfNotNullOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); if (value.Metadata is { Count: > 0 }) diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperDeltaResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs similarity index 95% rename from src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperDeltaResult.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs index bc3129774a9..ce690ef86b0 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperDeltaResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs @@ -5,7 +5,7 @@ using System.Linq; using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.CodeAnalysis.Remote.Razor; +namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal record TagHelperDeltaResult( bool Delta, diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs new file mode 100644 index 00000000000..332aecd0bfc --- /dev/null +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs @@ -0,0 +1,33 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; + +internal partial class TagHelperDeltaResultJsonConverter : ObjectJsonConverter +{ + public static readonly TagHelperDeltaResultJsonConverter Instance = new(); + + public TagHelperDeltaResultJsonConverter() + { + } + + protected override TagHelperDeltaResult ReadFromProperties(JsonDataReader reader) + { + var delta = reader.ReadBooleanOrTrue(nameof(TagHelperDeltaResult.Delta)); + var resultId = reader.ReadInt32OrZero(nameof(TagHelperDeltaResult.ResultId)); + var added = reader.ReadArrayOrEmpty(nameof(TagHelperDeltaResult.Added), + static r => ObjectReaders.ReadTagHelper(r, useCache: true)); + var removed = reader.ReadArrayOrEmpty(nameof(TagHelperDeltaResult.Removed), + static r => ObjectReaders.ReadTagHelper(r, useCache: true)); + + return new(delta, resultId, added, removed); + } + + protected override void WriteProperties(JsonDataWriter writer, TagHelperDeltaResult value) + { + writer.WriteIfNotTrue(nameof(value.Delta), value.Delta); + writer.WriteIfNotZero(nameof(value.ResultId), value.ResultId); + writer.WriteArrayIfNotNullOrEmpty(nameof(value.Added), value.Added, ObjectWriters.Write); + writer.WriteArrayIfNotNullOrEmpty(nameof(value.Removed), value.Removed, ObjectWriters.Write); + } +} diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs index ae106bd525c..abb490ee7b4 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; namespace Microsoft.CodeAnalysis.Remote.Razor; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs index b824ea5962a..0a9a243d58f 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -#nullable disable - using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.Remote.Razor.Test; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs index 69bf3d6c12f..16937a93c36 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs @@ -1,10 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -#nullable disable - using System; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.CodeAnalysis.Remote.Razor.Test; using Xunit; using Xunit.Abstractions; From ab37c9acf1987319d7822c093b0932eb7c35c0b5 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:07:56 -0700 Subject: [PATCH 03/15] Clean up ProjectSnapshotHandleJsonConverter --- .../Serialization/JsonDataReader.cs | 8 ++++++ .../Serialization/JsonDataWriter.cs | 16 ++++++++++++ .../Serialization/ObjectReaders.cs | 9 +++++++ .../Serialization/ObjectWriters.cs | 10 +++++++ ...ProjectSnapshotHandleJsonConverter.Data.cs | 26 ------------------- .../ProjectSnapshotHandleJsonConverter.cs | 15 ++++------- 6 files changed, 48 insertions(+), 36 deletions(-) delete mode 100644 src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.Data.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs index 5ffbe5553f8..13bb471f780 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs @@ -295,6 +295,14 @@ public T ReadObject(string propertyName, ReadProperties readProperties) return ReadObject(readProperties); } + [return: MaybeNull] + public T ReadObjectOrDefault(string propertyName, ReadProperties readProperties, T defaultValue) + => TryReadPropertyName(propertyName) ? ReadObject(readProperties) : defaultValue; + + public T? ReadObjectOrNull(string propertyName, ReadProperties readProperties) + where T : class + => ReadObjectOrDefault(propertyName, readProperties, defaultValue: null); + public T ReadNonNullObject(ReadProperties readProperties) { _reader.ReadToken(JsonToken.StartObject); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs index ab5e3587996..aa393b2483b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs @@ -181,6 +181,22 @@ public void WriteObject(T? value, WriteProperties writeProperties) _writer.WriteEndObject(); } + public void WriteObjectIfNotDefault(string propertyName, T? value, T? defaultValue, WriteProperties writeProperties) + { + if (!EqualityComparer.Default.Equals(value, defaultValue)) + { + WriteObject(propertyName, value, writeProperties); + } + } + + public void WriteObjectIfNotNull(string propertyName, T? value, WriteProperties writeProperties) + { + if (value is not null) + { + WriteObject(propertyName, value, writeProperties); + } + } + public void WriteArray(IEnumerable? elements, WriteValue writeElement) { if (writeElement is null) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs index 4875882184b..79808f32f18 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs @@ -63,6 +63,15 @@ static Func MessageFormat(string message) } } + public static ProjectSnapshotHandle ReadProjectSnapshotHandleFromProperties(JsonDataReader reader) + { + var filePath = reader.ReadNonNullString(nameof(ProjectSnapshotHandle.FilePath)); + var configuration = reader.ReadObjectOrNull(nameof(ProjectSnapshotHandle.Configuration), ReadConfigurationFromProperties); + var rootNamespace = reader.ReadStringOrNull(nameof(ProjectSnapshotHandle.RootNamespace)); + + return new(filePath, configuration, rootNamespace); + } + public static DocumentSnapshotHandle ReadDocumentSnapshotHandleFromProperties(JsonDataReader reader) { DocumentSnapshotHandleData data = default; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs index c0a6dd1791a..713b2a577bf 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs @@ -56,6 +56,16 @@ public static void WriteProperties(JsonDataWriter writer, RazorDiagnostic value) }); } + public static void Write(JsonDataWriter writer, ProjectSnapshotHandle? value) + => writer.WriteObject(value, WriteProperties); + + public static void WriteProperties(JsonDataWriter writer, ProjectSnapshotHandle value) + { + writer.Write(nameof(value.FilePath), value.FilePath); + writer.WriteObjectIfNotNull(nameof(value.Configuration), value.Configuration, WriteProperties); + writer.WriteIfNotNull(nameof(value.RootNamespace), value.RootNamespace); + } + public static void Write(JsonDataWriter writer, DocumentSnapshotHandle? value) => writer.WriteObject(value, WriteProperties); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.Data.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.Data.cs deleted file mode 100644 index 73c64d463fb..00000000000 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.Data.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT license. See License.txt in the project root for license information. - -using Microsoft.AspNetCore.Razor.Language; - -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; - -internal partial class ProjectSnapshotHandleJsonConverter -{ - private record struct Data(string FilePath, RazorConfiguration? Configuration, string? RootNamespace) - { - public static readonly PropertyMap PropertyMap = new( - (nameof(FilePath), ReadFilePath), - (nameof(Configuration), ReadConfiguration), - (nameof(RootNamespace), ReadRootNamespace)); - - private static void ReadFilePath(JsonDataReader reader, ref Data data) - => data.FilePath = reader.ReadNonNullString(); - - private static void ReadConfiguration(JsonDataReader reader, ref Data data) - => data.Configuration = reader.ReadObject(ObjectReaders.ReadConfigurationFromProperties); - - private static void ReadRootNamespace(JsonDataReader reader, ref Data data) - => data.RootNamespace = reader.ReadString(); - } -} diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs index b92f07ca548..8170cf5954d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs @@ -9,18 +9,13 @@ internal partial class ProjectSnapshotHandleJsonConverter : ObjectJsonConverter< { public static readonly ProjectSnapshotHandleJsonConverter Instance = new(); - protected override ProjectSnapshotHandle ReadFromProperties(JsonDataReader reader) + private ProjectSnapshotHandleJsonConverter() { - Data data = default; - reader.ReadProperties(ref data, Data.PropertyMap); - - return new(data.FilePath, data.Configuration, data.RootNamespace); } + protected override ProjectSnapshotHandle ReadFromProperties(JsonDataReader reader) + => ObjectReaders.ReadProjectSnapshotHandleFromProperties(reader); + protected override void WriteProperties(JsonDataWriter writer, ProjectSnapshotHandle value) - { - writer.Write(nameof(value.FilePath), value.FilePath); - writer.WriteObject(nameof(value.Configuration), value.Configuration, ObjectWriters.WriteProperties); - writer.Write(nameof(value.RootNamespace), value.RootNamespace); - } + => ObjectWriters.WriteProperties(writer, value); } From d6220d9f3d6aa64c1bbc02b12ba4f7e8ea17379e Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:19:32 -0700 Subject: [PATCH 04/15] Clean up JsonConverterCollectionExtensions --- .../JsonConverterCollectionExtensions.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs index 45f7bf36ba0..19c47301501 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs @@ -2,20 +2,20 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; +using System.Collections.Immutable; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal static class JsonConverterCollectionExtensions { - private static readonly List s_projectSerializerConverters = new List(4) - { - TagHelperDescriptorJsonConverter.Instance, - TagHelperResolutionResultJsonConverter.Instance, - TagHelperDeltaResultJsonConverter.Instance, - ProjectRazorJsonJsonConverter.Instance, - }; + private static readonly ImmutableArray s_converters = ImmutableArray.CreateRange( + new JsonConverter[] + { + TagHelperResolutionResultJsonConverter.Instance, + TagHelperDeltaResultJsonConverter.Instance, + ProjectRazorJsonJsonConverter.Instance + }); public static void RegisterProjectSerializerConverters(this JsonConverterCollection collection) { @@ -24,7 +24,7 @@ public static void RegisterProjectSerializerConverters(this JsonConverterCollect throw new ArgumentNullException(nameof(collection)); } - foreach (var converter in s_projectSerializerConverters) + foreach (var converter in s_converters) { collection.Add(converter); } From 7f7ecf4ab510f9ab2dd41a7d3457f545f2ba5a73 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:20:12 -0700 Subject: [PATCH 05/15] Remove TagHelperDescriptorJsonConverter --- .../TagHelperDescriptorJsonConverter.cs | 23 ------------------- .../ProjectRazorJsonPublisher.cs | 1 - 2 files changed, 24 deletions(-) delete mode 100644 src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorJsonConverter.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorJsonConverter.cs deleted file mode 100644 index ad00b3948ef..00000000000 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorJsonConverter.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT license. See License.txt in the project root for license information. - -using Microsoft.AspNetCore.Razor.Language; - -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; - -internal class TagHelperDescriptorJsonConverter : ObjectJsonConverter -{ - public static readonly TagHelperDescriptorJsonConverter Instance = new(); - - public static bool DisableCachingForTesting { private get; set; } = false; - - private TagHelperDescriptorJsonConverter() - { - } - - protected override TagHelperDescriptor ReadFromProperties(JsonDataReader reader) - => ObjectReaders.ReadTagHelperFromProperties(reader, !DisableCachingForTesting); - - protected override void WriteProperties(JsonDataWriter writer, TagHelperDescriptor value) - => ObjectWriters.WriteProperties(writer, value); -} diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs index 8cbb29bd51f..e9a647c12ca 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs @@ -83,7 +83,6 @@ public ProjectRazorJsonPublisher( _projectConfigurationFilePathStore = projectConfigurationFilePathStore; _logger = logger; - _serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); _serializer.Converters.Add(ProjectRazorJsonJsonConverter.Instance); } From e78677e24b3ab1ce21ccf116e1449a90b62499e8 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:24:44 -0700 Subject: [PATCH 06/15] Clean up TagHelperResolutionResultJsonConverter --- .../Serialization/ObjectReaders.cs | 3 +++ .../TagHelperDeltaResultJsonConverter.cs | 2 +- ...elperResolutionResultJsonConverter.Data.cs | 24 ------------------- .../TagHelperResolutionResultJsonConverter.cs | 13 +++++----- 4 files changed, 11 insertions(+), 31 deletions(-) delete mode 100644 src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.Data.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs index 79808f32f18..9e76b839668 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs @@ -48,6 +48,9 @@ public static RazorConfiguration ReadConfigurationFromProperties(JsonDataReader return RazorConfiguration.Create(data.LanguageVersion, data.ConfigurationName, data.Extensions); } + public static RazorDiagnostic ReadDiagnostic(JsonDataReader reader) + => reader.ReadNonNullObject(ReadDiagnosticFromProperties); + public static RazorDiagnostic ReadDiagnosticFromProperties(JsonDataReader reader) { DiagnosticData data = default; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs index 332aecd0bfc..94a52ab3702 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs @@ -7,7 +7,7 @@ internal partial class TagHelperDeltaResultJsonConverter : ObjectJsonConverter PropertyMap = new( - (nameof(Data.Descriptors), ReadDescriptors), - (nameof(Data.Diagnostics), ReadDiagnostics)); - - public static void ReadDescriptors(JsonDataReader reader, ref Data data) - => data.Descriptors = reader.ReadArrayOrEmpty( - static r => r.ReadNonNullObject( - static r => ObjectReaders.ReadTagHelperFromProperties(r, useCache: true))); - - public static void ReadDiagnostics(JsonDataReader reader, ref Data data) - => data.Diagnostics = reader.ReadArrayOrEmpty(static r => r.ReadNonNullObject(ObjectReaders.ReadDiagnosticFromProperties)); - } -} diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs index 597ae555ccf..f0ff931296a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs @@ -7,21 +7,22 @@ internal partial class TagHelperResolutionResultJsonConverter : ObjectJsonConver { public static readonly TagHelperResolutionResultJsonConverter Instance = new(); - public TagHelperResolutionResultJsonConverter() + private TagHelperResolutionResultJsonConverter() { } protected override TagHelperResolutionResult ReadFromProperties(JsonDataReader reader) { - Data data = default; - reader.ReadProperties(ref data, Data.PropertyMap); + var descriptors = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Descriptors), + static r => ObjectReaders.ReadTagHelper(r, useCache: true)); + var diagnostics = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Diagnostics), ObjectReaders.ReadDiagnostic); - return new(data.Descriptors, data.Diagnostics); + return new(descriptors, diagnostics); } protected override void WriteProperties(JsonDataWriter writer, TagHelperResolutionResult value) { - writer.WriteArray(nameof(value.Descriptors), value.Descriptors, ObjectWriters.Write); - writer.WriteArray(nameof(value.Diagnostics), value.Diagnostics, ObjectWriters.Write); + writer.WriteArrayIfNotNullOrEmpty(nameof(value.Descriptors), value.Descriptors, ObjectWriters.Write); + writer.WriteArrayIfNotNullOrEmpty(nameof(value.Diagnostics), value.Diagnostics, ObjectWriters.Write); } } From b8829de9836d66d1337eca952e4f184dad7cfc69 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:30:50 -0700 Subject: [PATCH 07/15] Clean up ProjectSnapshotHandleProxyJsonConverter --- ...ProjectSnapshotHandleProxyJsonConverter.cs | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs index 1d0d0bed4a7..487c73a5636 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; namespace Microsoft.VisualStudio.LiveShare.Razor.Serialization; @@ -13,42 +11,19 @@ internal class ProjectSnapshotHandleProxyJsonConverter : ObjectJsonConverter PropertyMap = new( - (nameof(FilePath), ReadFilePath), - (nameof(Configuration), ReadConfiguration), - (nameof(RootNamespace), ReadRootNamespace), - (nameof(ProjectWorkspaceState), ReadProjectWorkspaceState)); - - private static void ReadFilePath(JsonDataReader reader, ref Data data) - => data.FilePath = reader.ReadNonNullUri(); - - private static void ReadConfiguration(JsonDataReader reader, ref Data data) - => data.Configuration = reader.ReadNonNullObject(ObjectReaders.ReadConfigurationFromProperties); - - private static void ReadRootNamespace(JsonDataReader reader, ref Data data) - => data.RootNamespace = reader.ReadString(); - - private static void ReadProjectWorkspaceState(JsonDataReader reader, ref Data data) - => data.ProjectWorkspaceState = reader.ReadObject(ObjectReaders.ReadProjectWorkspaceStateFromProperties); + return new(filePath, configuration, rootNamespace, projectWorkspaceState); } protected override void WriteProperties(JsonDataWriter writer, ProjectSnapshotHandleProxy value) { writer.Write(nameof(value.FilePath), value.FilePath); - writer.Write(nameof(value.RootNamespace), value.RootNamespace); - writer.WriteObject(nameof(value.ProjectWorkspaceState), value.ProjectWorkspaceState, ObjectWriters.WriteProperties); writer.WriteObject(nameof(value.Configuration), value.Configuration, ObjectWriters.WriteProperties); + writer.WriteIfNotNull(nameof(value.RootNamespace), value.RootNamespace); + writer.WriteObjectIfNotNull(nameof(value.ProjectWorkspaceState), value.ProjectWorkspaceState, ObjectWriters.WriteProperties); } } From e43ac6ab00c9d08d5991e9ebe654a2797701ee31 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:41:27 -0700 Subject: [PATCH 08/15] Clean up various JsonConverterCollectionExtensions classes --- .../ProjectSnapshotSerializationBenchmark.cs | 2 +- .../RazorProjectJsonSerializer.cs | 2 +- .../JsonConverterCollectionExtensions.cs | 2 +- .../JsonConverterCollectionExtensions.cs | 8 +++--- .../RazorServiceDescriptors.cs | 21 ++++++++++++---- .../JsonConverterCollectionExtensions.cs | 25 ------------------- ...rosoft.VisualStudio.LiveShare.Razor.csproj | 4 +++ ...eShareJsonConverterCollectionExtensions.cs | 2 +- .../ProjectSnapshotHandleSerializationTest.cs | 2 +- 9 files changed, 30 insertions(+), 38 deletions(-) delete mode 100644 src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Serialization/JsonConverterCollectionExtensions.cs diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs index 3600c06fc11..40fce30ee21 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs @@ -7,7 +7,7 @@ using System.IO; using System.Text; using BenchmarkDotNet.Attributes; -using Microsoft.CodeAnalysis.Razor; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs index 7b0575c8fc0..dc145854d9c 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs @@ -30,7 +30,7 @@ static RazorProjectJsonSerializer() Formatting = Formatting.Indented }; - s_serializer.Converters.RegisterProjectSerializerConverters(); + s_serializer.Converters.RegisterRazorConverters(); s_fallbackProjectEngineFactory = new EmptyProjectEngineFactory(); s_stringComparison = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs index 3d8a967d0f7..3d40406053f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs @@ -28,6 +28,6 @@ public static void RegisterRazorConverters(this JsonConverterCollection collecti collection.Add(s_razorConverters[i]); } - collection.RegisterProjectSerializerConverters(); + ProjectEngineHost.Serialization.JsonConverterCollectionExtensions.RegisterRazorConverters(collection); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs index 19c47301501..63796044800 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using System.Collections.Immutable; using Newtonsoft.Json; @@ -12,12 +13,13 @@ internal static class JsonConverterCollectionExtensions private static readonly ImmutableArray s_converters = ImmutableArray.CreateRange( new JsonConverter[] { - TagHelperResolutionResultJsonConverter.Instance, + ProjectRazorJsonJsonConverter.Instance, + ProjectSnapshotHandleJsonConverter.Instance, TagHelperDeltaResultJsonConverter.Instance, - ProjectRazorJsonJsonConverter.Instance + TagHelperResolutionResultJsonConverter.Instance, }); - public static void RegisterProjectSerializerConverters(this JsonConverterCollection collection) + public static void RegisterRazorConverters(this ICollection collection) { if (collection is null) { diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs index a4e9100e70f..f7943a09665 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs @@ -3,8 +3,8 @@ using System; using System.Collections.Immutable; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.CodeAnalysis.ExternalAccess.Razor; -using Microsoft.CodeAnalysis.Razor; using Newtonsoft.Json; namespace Microsoft.CodeAnalysis.Remote.Razor; @@ -13,9 +13,20 @@ internal static class RazorServiceDescriptors { private const string ComponentName = "Razor"; - private static readonly ImmutableArray s_jsonConverters = new JsonConverterCollection() - .RegisterRazorConverters() - .ToImmutableArray(); + private static readonly ImmutableArray s_jsonConverters = GetJsonConverters(); - public static readonly RazorServiceDescriptorsWrapper TagHelperProviderServiceDescriptors = new(ComponentName, _ => "Razor TagHelper Provider", s_jsonConverters, new (Type, Type?)[] { (typeof(IRemoteTagHelperProviderService), null) }); + private static ImmutableArray GetJsonConverters() + { + var builder = ImmutableArray.CreateBuilder(); + + builder.RegisterRazorConverters(); + + return builder.ToImmutableArray(); + } + + public static readonly RazorServiceDescriptorsWrapper TagHelperProviderServiceDescriptors = new( + ComponentName, + featureDisplayNameProvider: _ => "Razor TagHelper Provider", + s_jsonConverters, + interfaces: new (Type, Type?)[] { (typeof(IRemoteTagHelperProviderService), null) }); } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Serialization/JsonConverterCollectionExtensions.cs deleted file mode 100644 index 3d646c0cbe9..00000000000 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Serialization/JsonConverterCollectionExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT license. See License.txt in the project root for license information. - -using System; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; -using Newtonsoft.Json; - -namespace Microsoft.CodeAnalysis.Razor; - -internal static class JsonConverterCollectionExtensions -{ - public static JsonConverterCollection RegisterRazorConverters(this JsonConverterCollection collection) - { - if (collection is null) - { - throw new ArgumentNullException(nameof(collection)); - } - - collection.Add(ProjectSnapshotHandleJsonConverter.Instance); - - collection.RegisterProjectSerializerConverters(); - - return collection; - } -} diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Microsoft.VisualStudio.LiveShare.Razor.csproj b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Microsoft.VisualStudio.LiveShare.Razor.csproj index 2fc528368ee..479d94592c6 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Microsoft.VisualStudio.LiveShare.Razor.csproj +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Microsoft.VisualStudio.LiveShare.Razor.csproj @@ -15,6 +15,10 @@ + + + + diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs index f267bfd0253..dbdc3ad6a5a 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using Microsoft.CodeAnalysis.Razor; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Newtonsoft.Json; namespace Microsoft.VisualStudio.LiveShare.Razor.Serialization; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs index 1912174e84c..606c757d257 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs @@ -5,8 +5,8 @@ using System.Linq; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; -using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; using Xunit; From 6c34a6cafb7c7be190c69c7d2056e0c79dadc83b Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 10:56:46 -0700 Subject: [PATCH 09/15] Make JsonDataReader.ReadArray(...) methods consistent --- .../CommonResources.cs | 6 +- .../TagHelperSerializationBenchmark.cs | 6 +- .../CompilationTagHelperResolver.cs | 2 +- .../Serialization/JsonDataReader.cs | 56 +++++++++++++++++-- .../Serialization/JsonDataWriter.cs | 2 +- .../ObjectReaders.ConfigurationData.cs | 4 +- .../ObjectReaders.ProjectRazorJsonData.cs | 8 ++- ...ObjectReaders.ProjectWorkspaceStateData.cs | 6 +- .../TagHelperResolutionResult.cs | 9 +-- .../TagHelperResolutionResultComparer.cs | 4 +- .../TagHelperResolutionResultJsonConverter.cs | 2 +- .../OOPTagHelperResolver.cs | 2 +- .../LanguageServerTestBase.cs | 5 +- .../Formatting/FormattingTestBase.cs | 5 +- .../TagHelperDescriptorSerializationTest.cs | 10 ++-- .../Shared/TestTagHelperResolver.cs | 15 +---- .../TagHelperDescriptorCacheTest.cs | 6 +- ...HelperResolutionResultSerializationTest.cs | 16 +++--- 18 files changed, 109 insertions(+), 55 deletions(-) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs index 62ae2ea7616..6ed514fe7d1 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.IO; using Microsoft.AspNetCore.Razor.Language; @@ -28,8 +29,9 @@ private static IReadOnlyList LoadTagHelpers(byte[] bytes) using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } private static ProjectRazorJson LoadProjectRazorJson(byte[] bytes) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs index 304f66b89ce..35f4fd86794 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -32,8 +33,9 @@ private byte[] TagHelperBytes private static IReadOnlyList DeserializeTagHelpers(TextReader reader) { return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } private static void SerializeTagHelpers(TextWriter writer, IReadOnlyList tagHelpers) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs index a6ff120d93c..23c0ba455ae 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs @@ -68,6 +68,6 @@ public async Task GetTagHelpersAsync(Project workspac } _telemetryReporter?.ReportEvent("taghelperresolver/gettaghelpers", Severity.Normal, timingDictionary.ToImmutableDictionary()); - return new TagHelperResolutionResult(results, Array.Empty()); + return new TagHelperResolutionResult(results, ImmutableArray.Empty); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs index 13bb471f780..30ecf3ca2e6 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.Extensions.ObjectPool; @@ -301,7 +302,7 @@ public T ReadObjectOrDefault(string propertyName, ReadProperties readPrope public T? ReadObjectOrNull(string propertyName, ReadProperties readProperties) where T : class - => ReadObjectOrDefault(propertyName, readProperties, defaultValue: null); + => ReadObjectOrDefault(propertyName, readProperties!, defaultValue: null); public T ReadNonNullObject(ReadProperties readProperties) { @@ -427,11 +428,56 @@ public void ReadProperties(ref TData data, PropertyMap propertyMap return ReadArray(readElement); } - public T[] ReadArrayOrEmpty(ReadValue readElement) - => ReadArray(readElement) ?? Array.Empty(); - public T[] ReadArrayOrEmpty(string propertyName, ReadValue readElement) - => ReadArray(propertyName, readElement) ?? Array.Empty(); + => TryReadPropertyName(propertyName) ? ReadArray(readElement) ?? Array.Empty() : Array.Empty(); + + public ImmutableArray ReadImmutableArray(ReadValue readElement) + { + _reader.ReadToken(JsonToken.StartArray); + + // First special case, is this an empty array? + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return ImmutableArray.Empty; + } + + // Second special case, is this an array of one element? + var firstElement = readElement(this); + + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return ImmutableArray.Create(firstElement); + } + + // There's more than one element, so we need to acquire a pooled list to + // read the rest of the array elements. + using var _ = ArrayBuilderPool.GetPooledObject(out var elements); + + // Be sure to add the element that we already read. + elements.Add(firstElement); + + do + { + var element = readElement(this); + elements.Add(element); + } + while (_reader.TokenType != JsonToken.EndArray); + + _reader.Read(); + + return elements.ToImmutable(); + } + + public ImmutableArray ReadImmutableArray(string propertyName, ReadValue readElement) + { + ReadPropertyName(propertyName); + return ReadImmutableArray(readElement); + } + + public ImmutableArray ReadImmutableArrayOrEmpty(string propertyName, ReadValue readElement) + => TryReadPropertyName(propertyName) ? ReadImmutableArray(readElement) : ImmutableArray.Empty; public void ProcessObject(T arg, ProcessProperties processProperties) { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs index aa393b2483b..0eea09e6420 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs @@ -183,7 +183,7 @@ public void WriteObject(T? value, WriteProperties writeProperties) public void WriteObjectIfNotDefault(string propertyName, T? value, T? defaultValue, WriteProperties writeProperties) { - if (!EqualityComparer.Default.Equals(value, defaultValue)) + if (!EqualityComparer.Default.Equals(value, defaultValue)) { WriteObject(propertyName, value, writeProperties); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs index 515fff46461..b092d294053 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using Microsoft.AspNetCore.Razor.Language; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; @@ -38,6 +39,7 @@ private static void ReadLanguageVersion(JsonDataReader reader, ref Configuration } private static void ReadExtensions(JsonDataReader reader, ref ConfigurationData data) - => data.Extensions = reader.ReadArrayOrEmpty(static r => r.ReadNonNullObject(ReadExtensionFromProperties)); + => data.Extensions = reader.ReadArray(static r => r.ReadNonNullObject(ReadExtensionFromProperties)) + ?? Array.Empty(); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs index 9ec2a095bf5..694aae4703a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.Razor.ProjectSystem; @@ -33,16 +34,17 @@ private static void ReadFilePath(JsonDataReader reader, ref ProjectRazorJsonData => data.FilePath = reader.ReadNonNullString(); private static void ReadConfiguration(JsonDataReader reader, ref ProjectRazorJsonData data) - => data.Configuration = reader.ReadObject(ObjectReaders.ReadConfigurationFromProperties); + => data.Configuration = reader.ReadObject(ReadConfigurationFromProperties); private static void ReadRootNamespace(JsonDataReader reader, ref ProjectRazorJsonData data) => data.RootNamespace = reader.ReadString(); private static void ReadProjectWorkspaceState(JsonDataReader reader, ref ProjectRazorJsonData data) - => data.ProjectWorkspaceState = reader.ReadObject(ObjectReaders.ReadProjectWorkspaceStateFromProperties); + => data.ProjectWorkspaceState = reader.ReadObject(ReadProjectWorkspaceStateFromProperties); private static void ReadDocuments(JsonDataReader reader, ref ProjectRazorJsonData data) - => data.Documents = reader.ReadArrayOrEmpty(static r => r.ReadNonNullObject(ObjectReaders.ReadDocumentSnapshotHandleFromProperties)); + => data.Documents = reader.ReadArray(static r => r.ReadNonNullObject(ReadDocumentSnapshotHandleFromProperties)) + ?? Array.Empty(); private static void ReadSerializationFormat(JsonDataReader reader, ref ProjectRazorJsonData data) => data.SerializationFormat = reader.ReadString(); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs index 30e1a874455..b49159a95fe 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.CSharp; @@ -15,9 +16,10 @@ private record struct ProjectWorkspaceStateData(TagHelperDescriptor[] TagHelpers (nameof(CSharpLanguageVersion), ReadCSharpLanguageVersion)); private static void ReadTagHelpers(JsonDataReader reader, ref ProjectWorkspaceStateData data) - => data.TagHelpers = reader.ReadArrayOrEmpty( + => data.TagHelpers = reader.ReadArray( static r => r.ReadNonNullObject( - static r => ReadTagHelperFromProperties(r, useCache: true))); + static r => ReadTagHelperFromProperties(r, useCache: true))) + ?? Array.Empty(); private static void ReadCSharpLanguageVersion(JsonDataReader reader, ref ProjectWorkspaceStateData data) => data.CSharpLanguageVersion = (LanguageVersion)reader.ReadInt32(); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs index 47db6d453e6..3db88883a84 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs @@ -3,20 +3,21 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal sealed class TagHelperResolutionResult { - internal static readonly TagHelperResolutionResult Empty = new(Array.Empty(), Array.Empty()); + internal static readonly TagHelperResolutionResult Empty = new(Array.Empty(), ImmutableArray.Empty); public IReadOnlyCollection Descriptors { get; } - public IReadOnlyList Diagnostics { get; } + public ImmutableArray Diagnostics { get; } - public TagHelperResolutionResult(IReadOnlyCollection? descriptors, IReadOnlyList? diagnostics) + public TagHelperResolutionResult(IReadOnlyCollection? descriptors, ImmutableArray diagnostics) { Descriptors = descriptors ?? Array.Empty(); - Diagnostics = diagnostics ?? Array.Empty(); + Diagnostics = diagnostics.NullToEmpty(); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs index b8e755277c9..20944316732 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs @@ -42,9 +42,9 @@ public int GetHashCode(TagHelperResolutionResult? obj) hash.Add(descriptor); } - for (var i = 0; i < obj.Diagnostics.Count; i++) + foreach (var diagnostic in obj.Diagnostics) { - hash.Add(obj.Diagnostics[i]); + hash.Add(diagnostic); } return hash.CombinedHash; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs index f0ff931296a..75a3335440d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs @@ -15,7 +15,7 @@ protected override TagHelperResolutionResult ReadFromProperties(JsonDataReader r { var descriptors = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Descriptors), static r => ObjectReaders.ReadTagHelper(r, useCache: true)); - var diagnostics = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Diagnostics), ObjectReaders.ReadDiagnostic); + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperResolutionResult.Diagnostics), ObjectReaders.ReadDiagnostic); return new(descriptors, diagnostics); } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs index c38a1ef01f2..bc48c6cb4b8 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs @@ -135,7 +135,7 @@ public override async Task GetTagHelpersAsync(Project var tagHelpers = ProduceTagHelpersFromDelta(projectSnapshot.FilePath, lastResultId, result.Value); - var resolutionResult = new TagHelperResolutionResult(tagHelpers, diagnostics: Array.Empty()); + var resolutionResult = new TagHelperResolutionResult(tagHelpers, ImmutableArray.Empty); return resolutionResult; } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs index 7d3611f0178..7351c6a182a 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs @@ -149,8 +149,9 @@ private static IReadOnlyList GetDefaultRuntimeComponents() using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } [Obsolete("Use " + nameof(LSPProjectSnapshotManagerDispatcher))] diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs index 26c2117e67a..4d6add8be25 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs @@ -343,7 +343,8 @@ private static IReadOnlyList GetDefaultRuntimeComponents() using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs index 4e70de16a16..d89762ec8c2 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs @@ -35,8 +35,9 @@ public void TagHelperDescriptor_DefaultBlazorServerProject_RoundTrips() using (var reader = new StreamReader(stream)) { expectedTagHelpers = JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } using var writeStream = new MemoryStream(); @@ -56,8 +57,9 @@ public void TagHelperDescriptor_DefaultBlazorServerProject_RoundTrips() using (var reader = new StreamReader(writeStream, Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: 4096, leaveOpen: true)) { actualTagHelpers = JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } // Assert diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs index 6378c2c5936..fd9e115b075 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs @@ -1,10 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -#nullable disable - -using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -20,19 +18,10 @@ public TestTagHelperResolver() : base(NoOpTelemetryReporter.Instance) { } - public TaskCompletionSource CompletionSource { get; set; } - public List TagHelpers { get; set; } = new List(); public override Task GetTagHelpersAsync(Project workspaceProject, IProjectSnapshot projectSnapshot, CancellationToken cancellationToken = default) { - if (CompletionSource is null) - { - return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToArray(), Array.Empty())); - } - else - { - return CompletionSource.Task; - } + return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToArray(), ImmutableArray.Empty)); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs index 2cf6d96a09d..83ccd9ff90d 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -96,7 +97,8 @@ private static IReadOnlyList ReadTagHelpers() using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs index 8fce95060fb..4a5c55b094e 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.IO; using System.Text; using Microsoft.AspNetCore.Mvc.Razor.Extensions; @@ -33,11 +34,12 @@ public void TagHelperResolutionResult_DefaultBlazorServerProject_RoundTrips() using (var reader = new StreamReader(stream)) { tagHelpers = JsonDataConvert.DeserializeData(reader, - static r => r.ReadArrayOrEmpty( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))); + static r => r.ReadArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))) + ?? Array.Empty(); } - var expectedResult = new TagHelperResolutionResult(tagHelpers, Array.Empty()); + var expectedResult = new TagHelperResolutionResult(tagHelpers, ImmutableArray.Empty); var serializer = new JsonSerializer { Converters = { TagHelperResolutionResultJsonConverter.Instance } }; @@ -102,7 +104,7 @@ public void TagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, Array.Empty()); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -148,7 +150,7 @@ public void ViewComponentTagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, Array.Empty()); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -192,7 +194,7 @@ public void TagHelperDescriptor_WithDiagnostic_RoundTripsProperly() .AddDiagnostic(RazorDiagnostic.Create( new RazorDiagnosticDescriptor("id", () => "Test Message", RazorDiagnosticSeverity.Error), new SourceSpan(null, 10, 20, 30, 40)))); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, Array.Empty()); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -237,7 +239,7 @@ public void TagHelperDescriptor_WithIndexerAttributes_RoundTripsProperly() .AddMetadata("foo", "bar") .TagOutputHint("Hint")); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, Array.Empty()); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); From 72a8f6860e100e8d10933272cf78308ddbfc3ed4 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 11:03:04 -0700 Subject: [PATCH 10/15] Remove unused TagHelperResolutionResult.Diagnostics property --- ...shotManagerBenchmarkBase.StaticTagHelperResolver.cs | 3 ++- .../TagHelperResolutionResultSerializationBenchmark.cs | 4 ++-- .../Serialization/CompilationTagHelperResolver.cs | 2 +- .../Serialization/TagHelperResolutionResult.cs | 7 ++----- .../Serialization/TagHelperResolutionResultComparer.cs | 8 +------- .../TagHelperResolutionResultJsonConverter.cs | 4 +--- .../OOPTagHelperResolver.cs | 3 +-- .../Shared/TestTagHelperResolver.cs | 2 +- .../TagHelperResolutionResultSerializationTest.cs | 10 +++++----- 9 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs index 9a970ffae8e..d87c38c6c81 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -30,6 +31,6 @@ public override Task GetTagHelpersAsync( Project project, IProjectSnapshot projectSnapshot, CancellationToken cancellationToken = default) - => Task.FromResult(new TagHelperResolutionResult(_tagHelpers, Array.Empty())); + => Task.FromResult(new TagHelperResolutionResult(_tagHelpers)); } } diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs index a08ca4fbd97..131cb4dd3d1 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs @@ -1,8 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.IO; using System.Text; using BenchmarkDotNet.Attributes; @@ -40,7 +40,7 @@ public void GlobalSetup() [IterationSetup] public void IterationSetup() { - _tagHelperResolutionResult = new TagHelperResolutionResult(TagHelpers, Array.Empty()); + _tagHelperResolutionResult = new TagHelperResolutionResult(TagHelpers); } [Benchmark(Description = "RoundTrip TagHelperDescriptorResult")] diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs index 23c0ba455ae..febd5b11245 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs @@ -68,6 +68,6 @@ public async Task GetTagHelpersAsync(Project workspac } _telemetryReporter?.ReportEvent("taghelperresolver/gettaghelpers", Severity.Normal, timingDictionary.ToImmutableDictionary()); - return new TagHelperResolutionResult(results, ImmutableArray.Empty); + return new TagHelperResolutionResult(results); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs index 3db88883a84..c6e746b6f47 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs @@ -3,21 +3,18 @@ using System; using System.Collections.Generic; -using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal sealed class TagHelperResolutionResult { - internal static readonly TagHelperResolutionResult Empty = new(Array.Empty(), ImmutableArray.Empty); + internal static readonly TagHelperResolutionResult Empty = new(Array.Empty()); public IReadOnlyCollection Descriptors { get; } - public ImmutableArray Diagnostics { get; } - public TagHelperResolutionResult(IReadOnlyCollection? descriptors, ImmutableArray diagnostics) + public TagHelperResolutionResult(IReadOnlyCollection? descriptors) { Descriptors = descriptors ?? Array.Empty(); - Diagnostics = diagnostics.NullToEmpty(); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs index 20944316732..e148e8d07d6 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs @@ -24,8 +24,7 @@ public bool Equals(TagHelperResolutionResult? x, TagHelperResolutionResult? y) return false; } - return x.Descriptors.SequenceEqual(y.Descriptors, TagHelperDescriptorComparer.Default) && - x.Diagnostics.SequenceEqual(y.Diagnostics); + return x.Descriptors.SequenceEqual(y.Descriptors, TagHelperDescriptorComparer.Default); } public int GetHashCode(TagHelperResolutionResult? obj) @@ -42,11 +41,6 @@ public int GetHashCode(TagHelperResolutionResult? obj) hash.Add(descriptor); } - foreach (var diagnostic in obj.Diagnostics) - { - hash.Add(diagnostic); - } - return hash.CombinedHash; } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs index 75a3335440d..3662e31c203 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs @@ -15,14 +15,12 @@ protected override TagHelperResolutionResult ReadFromProperties(JsonDataReader r { var descriptors = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Descriptors), static r => ObjectReaders.ReadTagHelper(r, useCache: true)); - var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperResolutionResult.Diagnostics), ObjectReaders.ReadDiagnostic); - return new(descriptors, diagnostics); + return new(descriptors); } protected override void WriteProperties(JsonDataWriter writer, TagHelperResolutionResult value) { writer.WriteArrayIfNotNullOrEmpty(nameof(value.Descriptors), value.Descriptors, ObjectWriters.Write); - writer.WriteArrayIfNotNullOrEmpty(nameof(value.Diagnostics), value.Diagnostics, ObjectWriters.Write); } } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs index bc48c6cb4b8..c9e0c49a04c 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs @@ -135,8 +135,7 @@ public override async Task GetTagHelpersAsync(Project var tagHelpers = ProduceTagHelpersFromDelta(projectSnapshot.FilePath, lastResultId, result.Value); - var resolutionResult = new TagHelperResolutionResult(tagHelpers, ImmutableArray.Empty); - return resolutionResult; + return new TagHelperResolutionResult(tagHelpers); } // Protected virtual for testing diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs index fd9e115b075..e6ea34791a2 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs @@ -22,6 +22,6 @@ public TestTagHelperResolver() : base(NoOpTelemetryReporter.Instance) public override Task GetTagHelpersAsync(Project workspaceProject, IProjectSnapshot projectSnapshot, CancellationToken cancellationToken = default) { - return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToArray(), ImmutableArray.Empty)); + return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToArray())); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs index 4a5c55b094e..cb11092ef27 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs @@ -39,7 +39,7 @@ public void TagHelperResolutionResult_DefaultBlazorServerProject_RoundTrips() ?? Array.Empty(); } - var expectedResult = new TagHelperResolutionResult(tagHelpers, ImmutableArray.Empty); + var expectedResult = new TagHelperResolutionResult(tagHelpers); var serializer = new JsonSerializer { Converters = { TagHelperResolutionResultJsonConverter.Instance } }; @@ -104,7 +104,7 @@ public void TagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -150,7 +150,7 @@ public void ViewComponentTagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -194,7 +194,7 @@ public void TagHelperDescriptor_WithDiagnostic_RoundTripsProperly() .AddDiagnostic(RazorDiagnostic.Create( new RazorDiagnosticDescriptor("id", () => "Test Message", RazorDiagnosticSeverity.Error), new SourceSpan(null, 10, 20, 30, 40)))); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -239,7 +239,7 @@ public void TagHelperDescriptor_WithIndexerAttributes_RoundTripsProperly() .AddMetadata("foo", "bar") .TagOutputHint("Hint")); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }, ImmutableArray.Empty); + var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); From d9352d8b32172d96cf44f61ac25851e2387c95b0 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 12:16:31 -0700 Subject: [PATCH 11/15] Use ImmutableArray in TagHelperResolutionResult and TagHelperDeltaResult --- .../CommonResources.cs | 14 +++---- ...erBenchmarkBase.StaticTagHelperResolver.cs | 4 +- .../RemoteTagHelperDeltaProviderBenchmark.cs | 28 ++++++------- ...rResolutionResultSerializationBenchmark.cs | 5 +-- .../CompilationTagHelperResolver.cs | 3 +- .../Serialization/JsonDataReader.cs | 2 +- .../Serialization/TagHelperDeltaResult.cs | 17 ++++---- .../TagHelperDeltaResultJsonConverter.cs | 4 +- .../TagHelperResolutionResult.cs | 11 +++--- .../TagHelperResolutionResultJsonConverter.cs | 4 +- .../OOPTagHelperResolver.cs | 8 ++-- .../RemoteTagHelperDeltaProvider.cs | 39 +++++++++---------- .../RemoteTagHelperProviderService.cs | 5 +-- .../TagHelperResultCache.cs | 21 +++++----- .../Shared/TestTagHelperResolver.cs | 2 +- .../OOPTagHelperResolverTest.cs | 28 ++++++------- .../RemoteTagHelperDeltaProviderTest.cs | 31 +++++---------- ...HelperResolutionResultSerializationTest.cs | 15 ++++--- .../TagHelperDeltaResultTest.cs | 16 ++++---- .../TagHelperDescriptorTestBase.cs | 16 ++++---- .../SerializationTest.cs | 6 +-- .../ImmutableArrayExtensions.cs | 8 ++++ 22 files changed, 138 insertions(+), 149 deletions(-) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs index 6ed514fe7d1..4515fceefbc 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs @@ -1,8 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; +using System.Collections.Immutable; using System.IO; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; @@ -12,26 +11,25 @@ namespace Microsoft.AspNetCore.Razor.Microbenchmarks; internal static class CommonResources { public static readonly byte[] LegacyTagHelperBytes = Resources.GetResourceBytes("taghelpers.json"); - public static readonly IReadOnlyList LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperBytes); + public static readonly ImmutableArray LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperBytes); public static readonly byte[] LegacyProjectRazorJsonBytes = Resources.GetResourceBytes("project.razor.json"); public static readonly ProjectRazorJson LegacyProjectRazorJson = LoadProjectRazorJson(LegacyProjectRazorJsonBytes); public static readonly byte[] TelerikTagHelperBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.taghelpers.json", folder: "Telerik"); - public static readonly IReadOnlyList TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperBytes); + public static readonly ImmutableArray TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperBytes); public static readonly byte[] TelerikProjectRazorJsonBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.project.razor.json", folder: "Telerik"); public static readonly ProjectRazorJson TelerikProjectRazorJson = LoadProjectRazorJson(TelerikProjectRazorJsonBytes); - private static IReadOnlyList LoadTagHelpers(byte[] bytes) + private static ImmutableArray LoadTagHelpers(byte[] bytes) { using var stream = new MemoryStream(bytes); using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArray( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))) - ?? Array.Empty(); + static r => r.ReadImmutableArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))).NullToEmpty(); } private static ProjectRazorJson LoadProjectRazorJson(byte[] bytes) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs index d87c38c6c81..9546c4dd90a 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs @@ -19,9 +19,9 @@ public abstract partial class ProjectSnapshotManagerBenchmarkBase { private class StaticTagHelperResolver : TagHelperResolver { - private readonly IReadOnlyList _tagHelpers; + private readonly ImmutableArray _tagHelpers; - public StaticTagHelperResolver(IReadOnlyList tagHelpers, ITelemetryReporter telemetryReporter) + public StaticTagHelperResolver(ImmutableArray tagHelpers, ITelemetryReporter telemetryReporter) : base(telemetryReporter) { _tagHelpers = tagHelpers; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Remote/RemoteTagHelperDeltaProviderBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Remote/RemoteTagHelperDeltaProviderBenchmark.cs index 8c961e804b6..a26f8c843e4 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Remote/RemoteTagHelperDeltaProviderBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Remote/RemoteTagHelperDeltaProviderBenchmark.cs @@ -1,8 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; +using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using System.Linq; using BenchmarkDotNet.Attributes; @@ -15,17 +14,19 @@ public class RemoteTagHelperDeltaProviderBenchmark { public RemoteTagHelperDeltaProviderBenchmark() { - DefaultTagHelperSet = CommonResources.LegacyTagHelpers.ToHashSet(); + DefaultTagHelperSet = CommonResources.LegacyTagHelpers.ToHashSet().ToImmutableArray(); Added50PercentMoreDefaultTagHelpers = DefaultTagHelperSet - .Take(DefaultTagHelperSet.Count / 2) + .Take(DefaultTagHelperSet.Length / 2) .Select(th => new RenamedTagHelperDescriptor(th.Name + "Added", th)) .Concat(DefaultTagHelperSet) - .ToHashSet(); + .ToHashSet() + .ToImmutableArray(); RemovedHalfOfDefaultTagHelpers = DefaultTagHelperSet - .Take(CommonResources.LegacyTagHelpers.Count / 2) - .ToHashSet(); + .Take(CommonResources.LegacyTagHelpers.Length / 2) + .ToHashSet() + .ToImmutableArray(); var tagHelpersToMutate = DefaultTagHelperSet .Take(2) @@ -33,16 +34,17 @@ public RemoteTagHelperDeltaProviderBenchmark() MutatedTwoDefaultTagHelpers = DefaultTagHelperSet .Skip(2) .Concat(tagHelpersToMutate) - .ToHashSet(); + .ToHashSet() + .ToImmutableArray(); } - private IReadOnlyCollection DefaultTagHelperSet { get; } + private ImmutableArray DefaultTagHelperSet { get; } - private IReadOnlyCollection Added50PercentMoreDefaultTagHelpers { get; } + private ImmutableArray Added50PercentMoreDefaultTagHelpers { get; } - private IReadOnlyCollection RemovedHalfOfDefaultTagHelpers { get; } + private ImmutableArray RemovedHalfOfDefaultTagHelpers { get; } - private IReadOnlyCollection MutatedTwoDefaultTagHelpers { get; } + private ImmutableArray MutatedTwoDefaultTagHelpers { get; } private string ProjectFilePath { get; } = "C:/path/to/project.csproj"; @@ -68,7 +70,7 @@ public void TagHelper_GetTagHelpersDelta_NewProject() [Benchmark(Description = "Calculate Delta - Remove project")] public void TagHelper_GetTagHelpersDelta_RemoveProject() { - _ = Provider.GetTagHelpersDelta(ProjectFilePath, LastResultId, Array.Empty()); + _ = Provider.GetTagHelpersDelta(ProjectFilePath, LastResultId, ImmutableArray.Empty); } [Benchmark(Description = "Calculate Delta - Add lots of TagHelpers")] diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs index 131cb4dd3d1..92419aa8489 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; using System.Collections.Immutable; using System.IO; using System.Text; @@ -17,7 +16,7 @@ public class TagHelperResolutionResultSerializationBenchmark [ParamsAllValues] public ResourceSet ResourceSet { get; set; } - private IReadOnlyList TagHelpers + private ImmutableArray TagHelpers => ResourceSet switch { ResourceSet.Telerik => CommonResources.TelerikTagHelpers, @@ -60,7 +59,7 @@ public void RoundTrip() var result = Serializer.Deserialize(jsonReader); if (result is null || - result.Descriptors.Count != TagHelpers.Count) + result.Descriptors.Length != TagHelpers.Length) { throw new InvalidDataException(); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs index febd5b11245..d7ba4d0246f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs @@ -68,6 +68,7 @@ public async Task GetTagHelpersAsync(Project workspac } _telemetryReporter?.ReportEvent("taghelperresolver/gettaghelpers", Severity.Normal, timingDictionary.ToImmutableDictionary()); - return new TagHelperResolutionResult(results); + + return new TagHelperResolutionResult(results.ToImmutableArray()); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs index 30ecf3ca2e6..51cdb99f292 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs @@ -317,7 +317,7 @@ public T ReadNonNullObject(string propertyName, ReadProperties readPropert { ReadPropertyName(propertyName); - return readProperties(this); + return ReadNonNullObject(readProperties); } public TData ReadObjectData(PropertyMap propertyMap) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs index ce690ef86b0..2a769bc6dd1 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs @@ -1,21 +1,21 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; -using System.Linq; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.PooledObjects; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal record TagHelperDeltaResult( bool Delta, int ResultId, - IReadOnlyCollection Added, - IReadOnlyCollection Removed) + ImmutableArray Added, + ImmutableArray Removed) { - public IReadOnlyCollection Apply(IReadOnlyCollection baseTagHelpers) + public ImmutableArray Apply(ImmutableArray baseTagHelpers) { - if (Added.Count == 0 && Removed.Count == 0) + if (Added.Length == 0 && Removed.Length == 0) { return baseTagHelpers; } @@ -25,7 +25,8 @@ public IReadOnlyCollection Apply(IReadOnlyCollection(baseTagHelpers.Count + Added.Count - Removed.Count); + using var _ = ArrayBuilderPool.GetPooledObject(out var newTagHelpers); + newTagHelpers.SetCapacityIfNeeded(baseTagHelpers.Length + Added.Length - Removed.Length); newTagHelpers.AddRange(Added); foreach (var existingTagHelper in baseTagHelpers) @@ -36,6 +37,6 @@ public IReadOnlyCollection Apply(IReadOnlyCollection ObjectReaders.ReadTagHelper(r, useCache: true)); - var removed = reader.ReadArrayOrEmpty(nameof(TagHelperDeltaResult.Removed), + var removed = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperDeltaResult.Removed), static r => ObjectReaders.ReadTagHelper(r, useCache: true)); return new(delta, resultId, added, removed); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs index c6e746b6f47..5c602f89c6b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs @@ -1,20 +1,19 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; internal sealed class TagHelperResolutionResult { - internal static readonly TagHelperResolutionResult Empty = new(Array.Empty()); + public static readonly TagHelperResolutionResult Empty = new(ImmutableArray.Empty); - public IReadOnlyCollection Descriptors { get; } + public ImmutableArray Descriptors { get; } - public TagHelperResolutionResult(IReadOnlyCollection? descriptors) + public TagHelperResolutionResult(ImmutableArray descriptors) { - Descriptors = descriptors ?? Array.Empty(); + Descriptors = descriptors.NullToEmpty(); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs index 3662e31c203..220c328667d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs @@ -13,7 +13,7 @@ private TagHelperResolutionResultJsonConverter() protected override TagHelperResolutionResult ReadFromProperties(JsonDataReader reader) { - var descriptors = reader.ReadArrayOrEmpty(nameof(TagHelperResolutionResult.Descriptors), + var descriptors = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperResolutionResult.Descriptors), static r => ObjectReaders.ReadTagHelper(r, useCache: true)); return new(descriptors); @@ -21,6 +21,6 @@ protected override TagHelperResolutionResult ReadFromProperties(JsonDataReader r protected override void WriteProperties(JsonDataWriter writer, TagHelperResolutionResult value) { - writer.WriteArrayIfNotNullOrEmpty(nameof(value.Descriptors), value.Descriptors, ObjectWriters.Write); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Descriptors), value.Descriptors, ObjectWriters.Write); } } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs index c9e0c49a04c..7c3afaa7354 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics; using System.Threading; @@ -139,7 +138,8 @@ public override async Task GetTagHelpersAsync(Project } // Protected virtual for testing - protected virtual IReadOnlyCollection? ProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) + protected virtual ImmutableArray ProduceTagHelpersFromDelta( + string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) { var fromCache = true; var stopWatch = Stopwatch.StartNew(); @@ -147,7 +147,7 @@ public override async Task GetTagHelpersAsync(Project if (!_resultCache.TryGet(projectFilePath, lastResultId, out var tagHelpers)) { // We most likely haven't made a request to the server yet so there's no delta to apply - tagHelpers = Array.Empty(); + tagHelpers = ImmutableArray.Empty; fromCache = false; if (deltaResult.Delta) @@ -160,7 +160,7 @@ public override async Task GetTagHelpersAsync(Project else if (!deltaResult.Delta) { // Not a delta based response, we should treat it as a "refresh" - tagHelpers = Array.Empty(); + tagHelpers = ImmutableArray.Empty; fromCache = false; } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs index abb490ee7b4..26ceb412fa7 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs @@ -1,10 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; namespace Microsoft.CodeAnalysis.Remote.Razor; @@ -23,12 +22,12 @@ public RemoteTagHelperDeltaProvider() public TagHelperDeltaResult GetTagHelpersDelta( string projectFilePath, int lastResultId, - IReadOnlyCollection currentTagHelpers) + ImmutableArray currentTagHelpers) { var cacheHit = _resultCache.TryGet(projectFilePath, lastResultId, out var cachedTagHelpers); if (!cacheHit) { - cachedTagHelpers = Array.Empty(); + cachedTagHelpers = ImmutableArray.Empty; } var added = GetAddedTagHelpers(currentTagHelpers, cachedTagHelpers!); @@ -37,7 +36,7 @@ public TagHelperDeltaResult GetTagHelpersDelta( lock (_resultIdLock) { var resultId = _currentResultId; - if (added.Count > 0 || removed.Count > 0) + if (added.Length > 0 || removed.Length > 0) { // The result actually changed, lets generate & cache a new result resultId = ++_currentResultId; @@ -54,21 +53,21 @@ public TagHelperDeltaResult GetTagHelpersDelta( } } - private static IReadOnlyCollection GetAddedTagHelpers(IReadOnlyCollection current, IReadOnlyCollection old) + private static ImmutableArray GetAddedTagHelpers(ImmutableArray current, ImmutableArray old) { - if (old.Count == 0) + if (old.Length == 0) { - // Everythign is considered added when there is no collection to compare to. + // Everything is considered added when there is no collection to compare to. return current; } - if (current.Count == 0) + if (current.Length == 0) { // No new descriptors so can't possibly add any - return Array.Empty(); + return ImmutableArray.Empty; } - var added = new List(); + using var _ = ArrayBuilderPool.GetPooledObject(out var added); foreach (var tagHelper in current) { @@ -78,24 +77,24 @@ private static IReadOnlyCollection GetAddedTagHelpers(IRead } } - return added; + return added.ToImmutable(); } - private static IReadOnlyCollection GetRemovedTagHelpers(IReadOnlyCollection current, IReadOnlyCollection old) + private static ImmutableArray GetRemovedTagHelpers(ImmutableArray current, ImmutableArray old) { - if (old.Count == 0) + if (old.Length == 0) { - // Can't have anything removed if there's nothign to compare to - return Array.Empty(); + // Can't have anything removed if there's nothing to compare to + return ImmutableArray.Empty; } - if (current.Count == 0) + if (current.Length == 0) { // Current collection has nothing so anything in "old" must have been removed return old; } - var removed = new List(); + using var _ = ArrayBuilderPool.GetPooledObject(out var removed); foreach (var tagHelper in old) { @@ -105,6 +104,6 @@ private static IReadOnlyCollection GetRemovedTagHelpers(IRe } } - return removed; + return removed.ToImmutable(); } } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs index 776e8794753..724e2c49a99 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.ExternalAccess.Razor; @@ -66,7 +65,7 @@ public async ValueTask GetTagHelpersDeltaCoreAsync(RazorPi { var tagHelperResolutionResult = await GetTagHelpersCoreAsync(solutionInfo, projectHandle, factoryTypeName, cancellationToken).ConfigureAwait(false); var currentTagHelpers = tagHelperResolutionResult.Descriptors; - var deltaResult = _tagHelperDeltaProvider.GetTagHelpersDelta(projectHandle.FilePath, lastResultId, currentTagHelpers); - return deltaResult; + + return _tagHelperDeltaProvider.GetTagHelpersDelta(projectHandle.FilePath, lastResultId, currentTagHelpers); } } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs index b5e1db87465..f3863cae8dd 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs @@ -1,8 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; @@ -10,24 +9,26 @@ namespace Microsoft.CodeAnalysis.Remote.Razor; internal class TagHelperResultCache { - private readonly MemoryCache _projectResultCache; + private record Entry(int ResultId, ImmutableArray Descriptors); + + private readonly MemoryCache _projectResultCache; public TagHelperResultCache() { - _projectResultCache = new MemoryCache(sizeLimit: 50); + _projectResultCache = new MemoryCache(sizeLimit: 50); } - public bool TryGet(string projectFilePath, int resultId, [NotNullWhen(returnValue: true)] out IReadOnlyCollection? cachedTagHelpers) + public bool TryGet(string projectFilePath, int resultId, out ImmutableArray cachedTagHelpers) { if (!_projectResultCache.TryGetValue(projectFilePath, out var cachedResult)) { - cachedTagHelpers = null; + cachedTagHelpers = default; return false; } else if (cachedResult.ResultId != resultId) { // We don't know about the result that's being requested. Fallback to uncached behavior. - cachedTagHelpers = null; + cachedTagHelpers = default; return false; } @@ -47,11 +48,9 @@ public bool TryGetId(string projectFilePath, out int resultId) return true; } - public void Set(string projectFilePath, int resultId, IReadOnlyCollection tagHelpers) + public void Set(string projectFilePath, int resultId, ImmutableArray tagHelpers) { - var cacheEntry = new ProjectResultCacheEntry(resultId, tagHelpers); + var cacheEntry = new Entry(resultId, tagHelpers); _projectResultCache.Set(projectFilePath, cacheEntry); } - - private record ProjectResultCacheEntry(int ResultId, IReadOnlyCollection Descriptors); } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs index e6ea34791a2..384c9200d0e 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs @@ -22,6 +22,6 @@ public TestTagHelperResolver() : base(NoOpTelemetryReporter.Instance) public override Task GetTagHelpersAsync(Project workspaceProject, IProjectSnapshot projectSnapshot, CancellationToken cancellationToken = default) { - return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToArray())); + return Task.FromResult(new TagHelperResolutionResult(TagHelpers.ToImmutableArray())); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs index 141a0f732c9..25f140a2847 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs @@ -4,7 +4,7 @@ #nullable disable using System; -using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -145,13 +145,13 @@ public void CalculateTagHelpersFromDelta_NewProject() { // Arrange var resolver = new TestTagHelperResolver(_engineFactory, ErrorReporter, _workspace, NoOpTelemetryReporter.Instance); - var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty()); + var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, ImmutableArray.Empty); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); // Assert - Assert.Equal(Project1TagHelpers, tagHelpers); + Assert.Equal(Project1TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] @@ -159,16 +159,16 @@ public void CalculateTagHelpersFromDelta_DeltaFailedToApplyToKnownProject() { // Arrange var resolver = new TestTagHelperResolver(_engineFactory, ErrorReporter, _workspace, NoOpTelemetryReporter.Instance); - var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty()); + var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, ImmutableArray.Empty); resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); - var newTagHelperSet = new[] { TagHelper1_Project1 }; - var failedDeltaApplication = new TagHelperDeltaResult(Delta: false, initialDelta.ResultId + 1, newTagHelperSet, Array.Empty()); + var newTagHelperSet = ImmutableArray.Create(TagHelper1_Project1); + var failedDeltaApplication = new TagHelperDeltaResult(Delta: false, initialDelta.ResultId + 1, newTagHelperSet, ImmutableArray.Empty); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, initialDelta.ResultId, failedDeltaApplication); // Assert - Assert.Equal(newTagHelperSet, tagHelpers); + Assert.Equal(newTagHelperSet, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] @@ -176,15 +176,15 @@ public void CalculateTagHelpersFromDelta_NoopResult() { // Arrange var resolver = new TestTagHelperResolver(_engineFactory, ErrorReporter, _workspace, NoOpTelemetryReporter.Instance); - var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty()); + var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, ImmutableArray.Empty); resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); - var noopDelta = new TagHelperDeltaResult(Delta: true, initialDelta.ResultId, Array.Empty(), Array.Empty()); + var noopDelta = new TagHelperDeltaResult(Delta: true, initialDelta.ResultId, ImmutableArray.Empty, ImmutableArray.Empty); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, initialDelta.ResultId, noopDelta); // Assert - Assert.Equal(Project1TagHelpers, tagHelpers); + Assert.Equal(Project1TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] @@ -192,9 +192,9 @@ public void CalculateTagHelpersFromDelta_ReplacedTagHelpers() { // Arrange var resolver = new TestTagHelperResolver(_engineFactory, ErrorReporter, _workspace, NoOpTelemetryReporter.Instance); - var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty()); + var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, ImmutableArray.Empty); resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); - var changedDelta = new TagHelperDeltaResult(Delta: true, initialDelta.ResultId + 1, new[] { TagHelper2_Project2 }, new[] { TagHelper2_Project1 }); + var changedDelta = new TagHelperDeltaResult(Delta: true, initialDelta.ResultId + 1, ImmutableArray.Create(TagHelper2_Project2), ImmutableArray.Create(TagHelper2_Project1)); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, initialDelta.ResultId, changedDelta); @@ -226,10 +226,10 @@ protected override Task ResolveTagHelpersInProcessAsy return OnResolveInProcess(projectSnapshot); } - public IReadOnlyCollection PublicProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) + public ImmutableArray PublicProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) => ProduceTagHelpersFromDelta(projectFilePath, lastResultId, deltaResult); - protected override IReadOnlyCollection ProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) + protected override ImmutableArray ProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) => base.ProduceTagHelpersFromDelta(projectFilePath, lastResultId, deltaResult); } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs index 0a9a243d58f..36e29b4b272 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/RemoteTagHelperDeltaProviderTest.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.Remote.Razor.Test; using Xunit; @@ -51,10 +51,7 @@ public void GetTagHelpersDelta_Clean_MultiProject() public void GetTagHelpersDelta_TagHelperRemovedFromProjectOne_InvalidResultId() { // Arrange - var tagHelpersWithOneRemoved = new[] - { - TagHelper1_Project1 - }; + var tagHelpersWithOneRemoved = ImmutableArray.Create(TagHelper1_Project1); _provider.GetTagHelpersDelta(Project1FilePath, lastResultId: -1, Project1TagHelpers); _provider.GetTagHelpersDelta(Project2FilePath, lastResultId: -1, Project2TagHelpers); @@ -71,10 +68,7 @@ public void GetTagHelpersDelta_TagHelperRemovedFromProjectOne_InvalidResultId() public void GetTagHelpersDelta_TagHelperRemovedFromProjectOne() { // Arrange - var tagHelpersWithOneRemoved = new[] - { - TagHelper1_Project1 - }; + var tagHelpersWithOneRemoved = ImmutableArray.Create(TagHelper1_Project1); var initialDelta = _provider.GetTagHelpersDelta(Project1FilePath, lastResultId: -1, Project1TagHelpers); _provider.GetTagHelpersDelta(Project2FilePath, lastResultId: -1, Project2TagHelpers); @@ -92,18 +86,18 @@ public void GetTagHelpersDelta_TagHelperRemovedFromProjectOne() public void GetTagHelpersDelta_TagHelpersCopiedToProjectOne() { // Arrange - var tagHelpers = new List(); + var tagHelpers = ImmutableArray.CreateBuilder(); tagHelpers.AddRange(Project1TagHelpers); tagHelpers.AddRange(Project2TagHelpers); var initialDelta = _provider.GetTagHelpersDelta(Project1FilePath, lastResultId: -1, Project1TagHelpers); _provider.GetTagHelpersDelta(Project2FilePath, lastResultId: -1, Project2TagHelpers); // Act - var delta = _provider.GetTagHelpersDelta(Project1FilePath, initialDelta.ResultId, tagHelpers); + var delta = _provider.GetTagHelpersDelta(Project1FilePath, initialDelta.ResultId, tagHelpers.ToImmutableArray()); // Assert Assert.True(delta.Delta); - Assert.Equal(Project2TagHelpers, delta.Added); + Assert.Equal(Project2TagHelpers, delta.Added, TagHelperDescriptorComparer.Default); Assert.Empty(delta.Removed); } @@ -150,16 +144,9 @@ public void GetTagHelpersDelta_NoChange_MultipleRequests() public void GetTagHelpersDelta_EndToEnd() { // Arrange - var mixedTagHelpers1 = new[] - { - TagHelper1_Project1, - TagHelper1_Project2, - }; - var mixedTagHelpers2 = new[] - { - TagHelper2_Project1, - TagHelper2_Project2, - }; + var mixedTagHelpers1 = ImmutableArray.Create(TagHelper1_Project1, TagHelper1_Project2); + var mixedTagHelpers2 = ImmutableArray.Create(TagHelper2_Project1, TagHelper2_Project2); + var initialDelta1 = _provider.GetTagHelpersDelta(Project1FilePath, lastResultId: -1, Project1TagHelpers); var initialDelta2 = _provider.GetTagHelpersDelta(Project2FilePath, lastResultId: -1, Project2TagHelpers); diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs index cb11092ef27..e7fce58905a 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs @@ -29,14 +29,13 @@ public void TagHelperResolutionResult_DefaultBlazorServerProject_RoundTrips() // Arrange var bytes = TestResources.GetResourceBytes(TestResources.BlazorServerAppTagHelpersJson); - IReadOnlyList tagHelpers; + ImmutableArray tagHelpers; using (var stream = new MemoryStream(bytes)) using (var reader = new StreamReader(stream)) { tagHelpers = JsonDataConvert.DeserializeData(reader, - static r => r.ReadArray( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))) - ?? Array.Empty(); + static r => r.ReadImmutableArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))); } var expectedResult = new TagHelperResolutionResult(tagHelpers); @@ -104,7 +103,7 @@ public void TagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); + var expectedResult = new TagHelperResolutionResult(ImmutableArray.Create(descriptor)); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -150,7 +149,7 @@ public void ViewComponentTagHelperDescriptor_RoundTripsProperly() builder.AddMetadata("foo", "bar"); }); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); + var expectedResult = new TagHelperResolutionResult(ImmutableArray.Create(descriptor)); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -194,7 +193,7 @@ public void TagHelperDescriptor_WithDiagnostic_RoundTripsProperly() .AddDiagnostic(RazorDiagnostic.Create( new RazorDiagnosticDescriptor("id", () => "Test Message", RazorDiagnosticSeverity.Error), new SourceSpan(null, 10, 20, 30, 40)))); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); + var expectedResult = new TagHelperResolutionResult(ImmutableArray.Create(descriptor)); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); @@ -239,7 +238,7 @@ public void TagHelperDescriptor_WithIndexerAttributes_RoundTripsProperly() .AddMetadata("foo", "bar") .TagOutputHint("Hint")); - var expectedResult = new TagHelperResolutionResult(new[] { descriptor }); + var expectedResult = new TagHelperResolutionResult(ImmutableArray.Create(descriptor)); // Act var json = JsonConvert.SerializeObject(expectedResult, TagHelperResolutionResultJsonConverter.Instance); diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs index 16937a93c36..a1962ea5e34 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.CodeAnalysis.Remote.Razor.Test; @@ -21,39 +21,39 @@ public TagHelperDeltaResultTest(ITestOutputHelper testOutput) public void Apply_Noop() { // Arrange - var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Array.Empty(), Array.Empty()); + var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, ImmutableArray.Empty, ImmutableArray.Empty); // Act var tagHelpers = delta.Apply(Project1TagHelpers); // Assert - Assert.Equal(Project1TagHelpers, tagHelpers); + Assert.Equal(Project1TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] public void Apply_Added() { // Arrange - var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Project1TagHelpers, Array.Empty()); + var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Project1TagHelpers, ImmutableArray.Empty); // Act var tagHelpers = delta.Apply(Project2TagHelpers); // Assert - Assert.Equal(Project1AndProject2TagHelpers, tagHelpers); + Assert.Equal(Project1AndProject2TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] public void Apply_Removed() { // Arrange - var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Array.Empty(), Project1TagHelpers); + var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, ImmutableArray.Empty, Project1TagHelpers); // Act var tagHelpers = delta.Apply(Project1AndProject2TagHelpers); // Assert - Assert.Equal(Project2TagHelpers, tagHelpers); + Assert.Equal(Project2TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } [Fact] @@ -66,6 +66,6 @@ public void Apply_AddAndRemoved() var tagHelpers = delta.Apply(Project2TagHelpers); // Assert - Assert.Equal(Project1TagHelpers, tagHelpers); + Assert.Equal(Project1TagHelpers, tagHelpers, TagHelperDescriptorComparer.Default); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDescriptorTestBase.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDescriptorTestBase.cs index d91348c5656..9e03bbbdfb1 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDescriptorTestBase.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDescriptorTestBase.cs @@ -1,9 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -#nullable disable - -using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Test.Common; using Xunit.Abstractions; @@ -15,13 +13,13 @@ public class TagHelperDescriptorTestBase : TestBase protected string Project1FilePath { get; } protected TagHelperDescriptor TagHelper1_Project1 { get; } protected TagHelperDescriptor TagHelper2_Project1 { get; } - protected IReadOnlyList Project1TagHelpers { get; } + protected ImmutableArray Project1TagHelpers { get; } protected string Project2FilePath { get; } protected TagHelperDescriptor TagHelper1_Project2 { get; } protected TagHelperDescriptor TagHelper2_Project2 { get; } - protected IReadOnlyList Project2TagHelpers { get; } - protected IReadOnlyList Project1AndProject2TagHelpers { get; } + protected ImmutableArray Project2TagHelpers { get; } + protected ImmutableArray Project1AndProject2TagHelpers { get; } public TagHelperDescriptorTestBase(ITestOutputHelper testOutput) : base(testOutput) @@ -29,13 +27,13 @@ public TagHelperDescriptorTestBase(ITestOutputHelper testOutput) Project1FilePath = "C:/path/to/Project1/Project1.csproj"; TagHelper1_Project1 = TagHelperDescriptorBuilder.Create("TagHelper1", "Project1").Build(); TagHelper2_Project1 = TagHelperDescriptorBuilder.Create("TagHelper2", "Project1").Build(); - Project1TagHelpers = new[] { TagHelper1_Project1, TagHelper2_Project1 }; + Project1TagHelpers = ImmutableArray.Create(TagHelper1_Project1, TagHelper2_Project1); Project2FilePath = "C:/path/to/Project2/Project2.csproj"; TagHelper1_Project2 = TagHelperDescriptorBuilder.Create("TagHelper1", "Project2").Build(); TagHelper2_Project2 = TagHelperDescriptorBuilder.Create("TagHelper2", "Project2").Build(); - Project2TagHelpers = new[] { TagHelper1_Project2, TagHelper2_Project2 }; + Project2TagHelpers = ImmutableArray.Create(TagHelper1_Project2, TagHelper2_Project2); - Project1AndProject2TagHelpers = new[] { TagHelper1_Project1, TagHelper2_Project1, TagHelper1_Project2, TagHelper2_Project2 }; + Project1AndProject2TagHelpers = ImmutableArray.Create(TagHelper1_Project1, TagHelper2_Project1, TagHelper1_Project2, TagHelper2_Project2); } } diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs index 0b79b71643c..9a2484d6a35 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs @@ -34,11 +34,11 @@ public void ProjectSnapshotHandleProxy_RoundTripsProperly() var expectedRootNamespace = "project"; var handle = new ProjectSnapshotHandleProxy(new Uri("vsls://some/path/project.csproj"), RazorConfiguration.Default, expectedRootNamespace, projectWorkspaceState); - var serializedHandle = JsonConvert.SerializeObject(handle, ProjectSnapshotHandleProxyJsonConverter.Instance); - Assert.NotNull(serializedHandle); + var json = JsonConvert.SerializeObject(handle, ProjectSnapshotHandleProxyJsonConverter.Instance); + Assert.NotNull(json); // Act - var deserializedHandle = JsonConvert.DeserializeObject(serializedHandle, ProjectSnapshotHandleProxyJsonConverter.Instance); + var deserializedHandle = JsonConvert.DeserializeObject(json, ProjectSnapshotHandleProxyJsonConverter.Instance); Assert.NotNull(deserializedHandle); // Assert diff --git a/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/ImmutableArrayExtensions.cs b/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/ImmutableArrayExtensions.cs index 563010db4fa..c3beccc1120 100644 --- a/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/ImmutableArrayExtensions.cs +++ b/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/ImmutableArrayExtensions.cs @@ -15,4 +15,12 @@ public static ImmutableArray NullToEmpty(this ImmutableArray array) { return array.IsDefault ? ImmutableArray.Empty : array; } + + public static void SetCapacityIfNeeded(this ImmutableArray.Builder builder, int newCapacity) + { + if (builder.Capacity < newCapacity) + { + builder.Capacity = newCapacity; + } + } } From 2104b9e05bee76a51e62d16427da5f2c8af3c922 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 12:55:34 -0700 Subject: [PATCH 12/15] Reorganize files in MS.ANC.Razor.ProjectEngineHost --- .../CommonResources.cs | 3 +- .../RazorLanguageServerBenchmarkBase.cs | 2 +- ...erBenchmarkBase.StaticTagHelperResolver.cs | 4 +-- .../ProjectSnapshotManagerBenchmarkBase.cs | 3 -- .../ProjectSnapshotSerializationBenchmark.cs | 3 +- .../Serialization/MemoryCacheBenchmark.cs | 2 +- .../ProjectRazorJsonSerializationBenchmark.cs | 3 +- ...rResolutionResultSerializationBenchmark.cs | 3 +- .../TagHelperSerializationBenchmark.cs | 2 +- .../Project/OmniSharpProjectSnapshot.cs | 2 +- .../PublicAPI.Unshipped.txt | 2 +- .../JsonConverterCollectionExtensions.cs | 2 +- .../RazorProjectJsonSerializer.cs | 6 ++-- .../DefaultRemoteTextLoaderFactory.cs | 2 +- .../JsonConverterCollectionExtensions.cs | 33 ------------------- ...omponentAccessibilityCodeActionProvider.cs | 2 +- .../ExtractToCodeBehindCodeActionResolver.cs | 2 +- .../LegacyRazorCompletionEndpoint.cs | 1 - .../Debugging/RazorBreakpointSpanEndpoint.cs | 1 - .../RazorProximityExpressionsEndpoint.cs | 1 - .../RazorTranslateDiagnosticsService.cs | 1 - ...actTextDocumentPresentationEndpointBase.cs | 1 - .../Formatting/FormattingPassBase.cs | 1 - .../InlineCompletionEndPoint.cs | 1 - .../LinkedEditingRangeEndpoint.cs | 1 - ...torProjectConfigurationFilePathEndpoint.cs | 2 +- .../ProjectConfigurationFileChangeDetector.cs | 2 +- ...ProjectConfigurationFileChangeEventArgs.cs | 3 +- .../ProjectConfigurationStateSynchronizer.cs | 5 +-- .../ProjectFileChangeDetector.cs | 2 +- .../ProjectSystem/DefaultDocumentResolver.cs | 2 +- .../ProjectSystem/DefaultProjectResolver.cs | 2 +- .../DefaultRazorProjectService.cs | 4 ++- .../ProjectSystem/RazorProjectService.cs | 4 +-- .../RazorFileChangeDetector.cs | 2 +- .../RazorLanguageQueryEndpoint.cs | 1 - .../RazorLanguageServerWrapper.cs | 3 +- .../RazorMapToDocumentEditsEndpoint.cs | 1 - .../RazorMapToDocumentRangesEndpoint.cs | 1 - .../Refactoring/RenameEndpoint.cs | 1 - .../RemoteRazorProjectFileSystem.cs | 2 +- .../Serialization/JsonFileDeserializer.cs | 2 +- .../Serialization/JsonSerializerExtensions.cs | 2 +- .../CompilationTagHelperResolver.cs | 4 ++- ....AspNetCore.Razor.ProjectEngineHost.csproj | 1 + .../CustomProjectEngineFactoryMetadata.cs | 0 .../DefaultProjectEngineFactory.cs | 0 .../EmptyProjectEngineFactory.cs | 0 .../ProjectEngineFactories.cs | 0 .../ProjectEngineFactory.cs | 0 .../ProjectEngineFactory_1_0.cs | 0 .../ProjectEngineFactory_1_1.cs | 0 .../ProjectEngineFactory_2_0.cs | 0 .../ProjectEngineFactory_2_1.cs | 0 .../ProjectEngineFactory_3_0.cs | 0 .../ProjectEngineFactory_Unsupported.cs | 0 .../UnsupportedCSharpLoweringPhase.cs | 0 .../UnsupportedRazorConfiguration.cs | 0 .../ProjectRazorJson.cs | 23 +++++-------- .../ProjectWorkspaceState.cs | 4 +-- .../JsonConverterCollectionExtensions.cs | 2 +- .../ProjectRazorJsonJsonConverter.cs | 4 ++- .../ProjectSnapshotHandleJsonConverter.cs | 4 +-- .../TagHelperDeltaResultJsonConverter.cs | 2 +- .../TagHelperResolutionResultJsonConverter.cs | 2 +- .../Serialization/DocumentSnapshotHandle.cs | 2 +- .../Serialization/JsonDataConvert.cs | 2 +- .../Serialization/JsonDataReader.Policy.cs | 2 +- .../Serialization/JsonDataReader.cs | 2 +- .../Serialization/JsonDataWriter.Policy.cs | 2 +- .../Serialization/JsonDataWriter.cs | 2 +- .../Serialization/JsonReaderExtensions.cs | 2 +- .../Serialization/ObjectJsonConverter`1.cs | 2 +- .../ObjectReaders.AllowedChildTagReader.cs | 2 +- ...ctReaders.BoundAttributeParameterReader.cs | 2 +- .../ObjectReaders.BoundAttributeReader.cs | 2 +- .../ObjectReaders.ConfigurationData.cs | 2 +- .../ObjectReaders.DiagnosticData.cs | 2 +- ...bjectReaders.DocumentSnapshotHandleData.cs | 2 +- .../ObjectReaders.LanguageVersionData.cs | 2 +- .../ObjectReaders.ProjectRazorJsonData.cs | 4 +-- ...ObjectReaders.ProjectWorkspaceStateData.cs | 2 +- .../ObjectReaders.RequiredAttributeReader.cs | 2 +- .../ObjectReaders.SourceSpanData.cs | 2 +- .../ObjectReaders.TagHelperReader.cs | 2 +- .../ObjectReaders.TagMatchingRuleReader.cs | 2 +- .../Serialization/ObjectReaders.cs | 5 +-- .../Serialization/ObjectWriters.cs | 5 +-- .../ProjectSerializationFormat.cs | 2 +- .../Serialization/ProjectSnapshotHandle.cs | 2 +- .../Serialization/PropertyMap`1.cs | 2 +- .../RazorSerializationConstants.cs | 2 +- .../Serialization/SerializedRazorExtension.cs | 2 +- .../Serialization/TagHelperDeltaResult.cs | 2 +- .../TagHelperResolutionResult.cs | 2 +- .../TagHelperResolutionResultComparer.cs | 2 +- .../FilePathNormalizer.cs | 2 +- .../MemoryCache.cs | 3 +- .../StringCache.cs | 2 +- .../TagHelperDescriptorCache.cs | 2 +- .../DefaultProjectWorkspaceStateGenerator.cs | 2 +- .../DefaultTagHelperResolver.cs | 2 +- .../DefaultProjectSnapshotManager.cs | 2 +- .../ProjectSystem/EphemeralProjectSnapshot.cs | 2 +- .../ProjectSystem/Extensions.cs | 1 + .../ProjectSystem/IProjectSnapshot.cs | 2 +- .../IProjectSnapshotExtensions.cs | 3 +- .../ProjectSystem/ProjectSnapshot.cs | 2 +- .../ProjectSnapshotManagerBase.cs | 2 +- .../ProjectSystem/ProjectState.cs | 2 +- .../TagHelperResolver.cs | 3 +- .../IRemoteTagHelperProviderService.cs | 3 +- .../OOPTagHelperResolver.cs | 2 +- .../RazorServiceBase.cs | 3 +- .../RazorServiceDescriptors.cs | 2 +- .../RemoteTagHelperDeltaProvider.cs | 2 +- .../RemoteTagHelperProviderService.cs | 6 ++-- .../RemoteTagHelperResolver.cs | 2 +- .../TagHelperResultCache.cs | 2 +- .../DefaultRazorBreakpointResolver.cs | 2 +- ...DefaultRazorProximityExpressionResolver.cs | 2 +- .../ProjectRazorJsonPublisher.cs | 2 +- .../DefaultProjectSnapshotManagerProxy.cs | 2 +- .../ProjectSnapshotHandleProxy.cs | 2 +- ...eShareJsonConverterCollectionExtensions.cs | 2 +- ...ProjectSnapshotHandleProxyJsonConverter.cs | 2 +- .../FilePathNormalizerTest.cs | 2 +- .../SerializationTest.cs | 5 +-- .../LanguageServerTestBase.cs | 4 +-- .../TestProjectSnapshot.cs | 2 +- .../AutoInsert/OnAutoInsertEndpointTest.cs | 1 - .../AddUsingsCodeActionResolverTest.cs | 1 - .../CodeActions/CodeActionEndpointTest.cs | 2 -- .../CreateComponentCodeActionResolverTest.cs | 1 - ...tractToCodeBehindCodeActionResolverTest.cs | 1 - .../LegacyRazorCompletionEndpointTest.cs | 1 - .../RazorBreakpointSpanEndpointTest.cs | 2 -- .../DefaultRazorProjectServiceTest.cs | 3 +- ...xtDocumentTextPresentationEndpointTests.cs | 1 - ...extDocumentUriPresentationEndpointTests.cs | 3 -- .../DocumentRangeFormattingEndpointTest.cs | 1 - .../FormattingLanguageServerClient.cs | 2 +- .../Formatting/FormattingTestBase.cs | 13 ++++---- .../Hover/HoverInfoServiceTest.cs | 2 +- .../OpenDocumentGeneratorTest.cs | 2 +- ...ectConfigurationFileChangeEventArgsTest.cs | 4 +-- ...ojectConfigurationStateSynchronizerTest.cs | 4 +-- .../RazorCodeDocumentExtensionsTest.cs | 1 - .../RazorLanguageEndpointTest.cs | 1 - .../Refactoring/RenameEndpointTest.cs | 2 +- .../WrapWithTag/WrapWithTagEndpointTests.cs | 1 - .../OmniSharpTestBase.cs | 2 +- .../MemoryCacheTest.cs | 2 +- .../DefaultProjectSnapshotTest.cs | 2 +- .../ProjectSystem/DocumentStateTest.cs | 2 +- .../ProjectStateGeneratedOutputTest.cs | 2 +- .../ProjectSystem/ProjectStateTest.cs | 2 +- .../RazorConfigurationSerializationTest.cs | 2 +- .../Serialization/StringCacheTest.cs | 2 +- .../TagHelperDescriptorSerializationTest.cs | 2 +- .../Shared/TestTagHelperResolver.cs | 2 +- .../TagHelperDescriptorCacheTest.cs | 16 ++++----- .../OOPTagHelperResolverTest.cs | 2 +- .../ProjectSnapshotHandleSerializationTest.cs | 3 +- ...HelperResolutionResultSerializationTest.cs | 3 +- .../TagHelperDeltaResultTest.cs | 2 +- ...ProjectSnapshotProjectEngineFactoryTest.cs | 2 +- ...faultProjectWorkspaceStateGeneratorTest.cs | 2 +- .../ProjectRazorJsonPublisherTest.cs | 2 +- .../TestLSPDocumentMappingProvider.cs | 1 - .../DefaultProjectSnapshotManagerTest.cs | 2 +- ...ojectSnapshotSynchronizationServiceTest.cs | 2 +- .../DefaultProjectSnapshotManagerProxyTest.cs | 2 +- .../SerializationTest.cs | 2 +- 174 files changed, 189 insertions(+), 243 deletions(-) delete mode 100644 src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => }/CompilationTagHelperResolver.cs (95%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/CustomProjectEngineFactoryMetadata.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/DefaultProjectEngineFactory.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/EmptyProjectEngineFactory.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactories.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_1_0.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_1_1.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_2_0.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_2_1.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_3_0.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/ProjectEngineFactory_Unsupported.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/UnsupportedCSharpLoweringPhase.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{ => ProjectEngineHost}/UnsupportedRazorConfiguration.cs (100%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => ProjectSystem}/ProjectRazorJson.cs (89%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => ProjectSystem}/ProjectWorkspaceState.cs (90%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/{ => Converters}/JsonConverterCollectionExtensions.cs (93%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/{ => Converters}/ProjectRazorJsonJsonConverter.cs (85%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/{ => Converters}/ProjectSnapshotHandleJsonConverter.cs (85%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/{ => Converters}/TagHelperDeltaResultJsonConverter.cs (95%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/{ => Converters}/TagHelperResolutionResultJsonConverter.cs (93%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => Utilities}/FilePathNormalizer.cs (96%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => Utilities}/MemoryCache.cs (96%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => Utilities}/StringCache.cs (98%) rename src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/{Serialization => Utilities}/TagHelperDescriptorCache.cs (98%) diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs index 4515fceefbc..6c24dec5c69 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs @@ -4,7 +4,8 @@ using System.Collections.Immutable; using System.IO; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.AspNetCore.Razor.Microbenchmarks; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs index ba59360c1b2..514ded0de93 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorLanguageServerBenchmarkBase.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs index 9546c4dd90a..51a5e9a6122 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.StaticTagHelperResolver.cs @@ -1,13 +1,11 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs index 0385fbf02a0..167b35e09a3 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs @@ -2,19 +2,16 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; using System.Collections.Immutable; using System.IO; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.PooledObjects; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; -using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Microbenchmarks; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs index 40fce30ee21..27eeff376a0 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs @@ -7,7 +7,8 @@ using System.IO; using System.Text; using BenchmarkDotNet.Attributes; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs index 351faade347..8ed28108a72 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/MemoryCacheBenchmark.cs @@ -5,7 +5,7 @@ using System.Linq; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs index 990c21d9e39..37719eacf4d 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs @@ -4,7 +4,8 @@ using System.IO; using System.Text; using BenchmarkDotNet.Attributes; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs index 92419aa8489..1b37fea32e5 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperResolutionResultSerializationBenchmark.cs @@ -6,7 +6,8 @@ using System.Text; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization; diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs index 35f4fd86794..688980353da 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs @@ -7,7 +7,7 @@ using System.Text; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Project/OmniSharpProjectSnapshot.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Project/OmniSharpProjectSnapshot.cs index dca080f95e3..abdc413e732 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Project/OmniSharpProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Project/OmniSharpProjectSnapshot.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Document; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces.ProjectSystem; using Newtonsoft.Json; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/PublicAPI.Unshipped.txt b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/PublicAPI.Unshipped.txt index 366739e2c94..14c6deb05ee 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/PublicAPI.Unshipped.txt +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/PublicAPI.Unshipped.txt @@ -42,7 +42,7 @@ Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnap Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.DocumentFilePaths.get -> System.Collections.Generic.IEnumerable! Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.FilePath.get -> string! Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.GetDocument(string! filePath) -> Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Document.OmniSharpDocumentSnapshot? -Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.ProjectWorkspaceState.get -> Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization.ProjectWorkspaceState? +Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.ProjectWorkspaceState.get -> Microsoft.AspNetCore.Razor.ProjectSystem.ProjectWorkspaceState? Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshot.Serialize(string! publishFilePath, Newtonsoft.Json.JsonSerializer! serializer, System.IO.StreamWriter! writer) -> void Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshotManager Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project.OmniSharpProjectSnapshotManager.Changed -> System.EventHandler? diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Serialization/JsonConverterCollectionExtensions.cs index d90bd8b2bf0..6490efd382f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Serialization/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp/Serialization/JsonConverterCollectionExtensions.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Serialization; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs index dc145854d9c..11877891904 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs @@ -5,13 +5,15 @@ using System.Runtime.InteropServices; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectEngineHost; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.AspNetCore.Razor.Telemetry; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/DefaultRemoteTextLoaderFactory.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/DefaultRemoteTextLoaderFactory.cs index adf042bce35..8c804998f1a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/DefaultRemoteTextLoaderFactory.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/DefaultRemoteTextLoaderFactory.cs @@ -5,7 +5,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs deleted file mode 100644 index 3d40406053f..00000000000 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer.Common/Extensions/JsonConverterCollectionExtensions.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT license. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; -using Microsoft.CodeAnalysis.Razor.Workspaces.Serialization; -using Newtonsoft.Json; - -namespace Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; - -internal static class JsonConverterCollectionExtensions -{ - private static readonly IReadOnlyList s_razorConverters = new List() - { - RazorUriJsonConverter.Instance, - }; - - public static void RegisterRazorConverters(this JsonConverterCollection collection) - { - if (collection is null) - { - throw new ArgumentNullException(nameof(collection)); - } - - for (var i = 0; i < s_razorConverters.Count; i++) - { - collection.Add(s_razorConverters[i]); - } - - ProjectEngineHost.Serialization.JsonConverterCollectionExtensions.RegisterRazorConverters(collection); - } -} diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ComponentAccessibilityCodeActionProvider.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ComponentAccessibilityCodeActionProvider.cs index 50b60415d36..eda4fa84fe7 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ComponentAccessibilityCodeActionProvider.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ComponentAccessibilityCodeActionProvider.cs @@ -16,7 +16,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.PooledObjects; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; using Microsoft.VisualStudio.Editor.Razor; using Microsoft.VisualStudio.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ExtractToCodeBehindCodeActionResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ExtractToCodeBehindCodeActionResolver.cs index f1f2c6bf461..e4e97480146 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ExtractToCodeBehindCodeActionResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/CodeActions/Razor/ExtractToCodeBehindCodeActionResolver.cs @@ -13,7 +13,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/LegacyRazorCompletionEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/LegacyRazorCompletionEndpoint.cs index 4d1ca4c852b..67ff167e0e3 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/LegacyRazorCompletionEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/LegacyRazorCompletionEndpoint.cs @@ -10,7 +10,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Legacy; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.CodeAnalysis.Razor.Completion; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorBreakpointSpanEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorBreakpointSpanEndpoint.cs index 6d03e654dc8..37121232d21 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorBreakpointSpanEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorBreakpointSpanEndpoint.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorProximityExpressionsEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorProximityExpressionsEndpoint.cs index b97807ed349..15437f5f660 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorProximityExpressionsEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Debugging/RazorProximityExpressionsEndpoint.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.CodeAnalysis.CSharp; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Diagnostics/RazorTranslateDiagnosticsService.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Diagnostics/RazorTranslateDiagnosticsService.cs index 1a6f8f7992b..a064ab93fbb 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Diagnostics/RazorTranslateDiagnosticsService.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Diagnostics/RazorTranslateDiagnosticsService.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Syntax; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.CodeAnalysis; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/DocumentPresentation/AbstractTextDocumentPresentationEndpointBase.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/DocumentPresentation/AbstractTextDocumentPresentationEndpointBase.cs index 2465e74b6de..620a2d5e02a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/DocumentPresentation/AbstractTextDocumentPresentationEndpointBase.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/DocumentPresentation/AbstractTextDocumentPresentationEndpointBase.cs @@ -8,7 +8,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Formatting/FormattingPassBase.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Formatting/FormattingPassBase.cs index c1511c6da0c..267c301e263 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Formatting/FormattingPassBase.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Formatting/FormattingPassBase.cs @@ -5,7 +5,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.VisualStudio.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/InlineCompletion/InlineCompletionEndPoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/InlineCompletion/InlineCompletionEndPoint.cs index fefae7b63da..d81fe23da6d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/InlineCompletion/InlineCompletionEndPoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/InlineCompletion/InlineCompletionEndPoint.cs @@ -12,7 +12,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Formatting; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/LinkedEditingRange/LinkedEditingRangeEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/LinkedEditingRange/LinkedEditingRangeEndpoint.cs index d7cefd75d1a..94c55d77516 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/LinkedEditingRange/LinkedEditingRangeEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/LinkedEditingRange/LinkedEditingRangeEndpoint.cs @@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Legacy; using Microsoft.AspNetCore.Razor.Language.Syntax; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/MonitorProjectConfigurationFilePathEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/MonitorProjectConfigurationFilePathEndpoint.cs index be1c9220ae0..660c664b7d5 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/MonitorProjectConfigurationFilePathEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/MonitorProjectConfigurationFilePathEndpoint.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.Extensions.Logging; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeDetector.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeDetector.cs index c3d6a4edd35..2a6186c3d6b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeDetector.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeDetector.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.Extensions.Logging; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs index 969103e29a0..e0c9038d7ce 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs @@ -5,7 +5,8 @@ using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; namespace Microsoft.AspNetCore.Razor.LanguageServer; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs index 9236d1d3df5..338e94054aa 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs @@ -6,9 +6,10 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Razor.LanguageServer; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectFileChangeDetector.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectFileChangeDetector.cs index ec1f429f7f7..f01a2d3af89 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectFileChangeDetector.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectFileChangeDetector.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; namespace Microsoft.AspNetCore.Razor.LanguageServer; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultDocumentResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultDocumentResolver.cs index 0bb3a9b97ca..b7550d2ba5c 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultDocumentResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultDocumentResolver.cs @@ -3,7 +3,7 @@ using System; using System.Diagnostics.CodeAnalysis; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultProjectResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultProjectResolver.cs index 1113a5f323f..90e1ec66144 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultProjectResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultProjectResolver.cs @@ -4,7 +4,7 @@ using System; using System.Diagnostics.CodeAnalysis; using System.IO; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs index b92a9174ccb..d8696cbfaae 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs @@ -10,7 +10,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/RazorProjectService.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/RazorProjectService.cs index 8664f574363..a778aaa7f13 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/RazorProjectService.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/RazorProjectService.cs @@ -3,8 +3,8 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.CodeAnalysis.Text; namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorFileChangeDetector.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorFileChangeDetector.cs index 621cce3e97b..787d02b75f5 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorFileChangeDetector.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorFileChangeDetector.cs @@ -9,7 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; namespace Microsoft.AspNetCore.Razor.LanguageServer; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageQueryEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageQueryEndpoint.cs index a28931dff0d..f0613f9cd41 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageQueryEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageQueryEndpoint.cs @@ -4,7 +4,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs index 6e0197715b4..c3e6090bc30 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs @@ -5,11 +5,10 @@ using System.Diagnostics; using System.IO; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Workspaces; -using Microsoft.CommonLanguageServerProtocol.Framework; using Microsoft.Extensions.DependencyInjection; using Microsoft.VisualStudio.LanguageServer.Protocol; using Newtonsoft.Json.Serialization; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentEditsEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentEditsEndpoint.cs index 7212632a87c..407deb6e2cf 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentEditsEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentEditsEndpoint.cs @@ -6,7 +6,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Formatting; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentRangesEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentRangesEndpoint.cs index 86f3a5c6f34..1c2fb96774d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentRangesEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorMapToDocumentRangesEndpoint.cs @@ -5,7 +5,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Refactoring/RenameEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Refactoring/RenameEndpoint.cs index 4c7b96f9d03..27ccfd40494 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Refactoring/RenameEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Refactoring/RenameEndpoint.cs @@ -12,7 +12,6 @@ using Microsoft.AspNetCore.Razor.Language.Components; using Microsoft.AspNetCore.Razor.Language.Syntax; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RemoteRazorProjectFileSystem.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RemoteRazorProjectFileSystem.cs index 3fc117249ce..15211a880bf 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RemoteRazorProjectFileSystem.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RemoteRazorProjectFileSystem.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.InteropServices; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis.Razor; namespace Microsoft.AspNetCore.Razor.LanguageServer; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs index 98db46f2477..eb7d3fd2ce4 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System.IO; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.LanguageServer.Serialization; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs index 0ca4fa29354..90d799bc929 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs @@ -2,8 +2,8 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.VisualStudio.LanguageServer.Protocol; using Newtonsoft.Json; diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/CompilationTagHelperResolver.cs similarity index 95% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/CompilationTagHelperResolver.cs index d7ba4d0246f..67b96da4786 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/CompilationTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/CompilationTagHelperResolver.cs @@ -8,12 +8,14 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor; internal class CompilationTagHelperResolver { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj index 1db8b2ca9f5..38e07b7f0ab 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj @@ -3,6 +3,7 @@ $(DefaultNetCoreTargetFrameworks);netstandard2.0;$(DefaultNetFxTargetFramework) Razor is a markup syntax for adding server-side logic to web pages. This package contains common assets that are used in the Razor language server and other assemblies. + Microsoft.AspNetCore.Razor false false true diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/CustomProjectEngineFactoryMetadata.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/CustomProjectEngineFactoryMetadata.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/CustomProjectEngineFactoryMetadata.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/CustomProjectEngineFactoryMetadata.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/DefaultProjectEngineFactory.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/DefaultProjectEngineFactory.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/DefaultProjectEngineFactory.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/DefaultProjectEngineFactory.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/EmptyProjectEngineFactory.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/EmptyProjectEngineFactory.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/EmptyProjectEngineFactory.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/EmptyProjectEngineFactory.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactories.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactories.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactories.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactories.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_1_0.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_1_0.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_1_0.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_1_0.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_1_1.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_1_1.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_1_1.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_1_1.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_2_0.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_2_0.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_2_0.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_2_0.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_2_1.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_2_1.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_2_1.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_2_1.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_3_0.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_3_0.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_3_0.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_3_0.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_Unsupported.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_Unsupported.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineFactory_Unsupported.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/ProjectEngineFactory_Unsupported.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/UnsupportedCSharpLoweringPhase.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/UnsupportedCSharpLoweringPhase.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/UnsupportedCSharpLoweringPhase.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/UnsupportedCSharpLoweringPhase.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/UnsupportedRazorConfiguration.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/UnsupportedRazorConfiguration.cs similarity index 100% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/UnsupportedRazorConfiguration.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectEngineHost/UnsupportedRazorConfiguration.cs diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJson.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs similarity index 89% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJson.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs index 765a4571867..81e6818033d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJson.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs @@ -3,12 +3,19 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.ProjectSystem; internal sealed class ProjectRazorJson { + public string SerializedFilePath { get; } + public string FilePath { get; } + public RazorConfiguration? Configuration { get; } + public string? RootNamespace { get; } + public ProjectWorkspaceState? ProjectWorkspaceState { get; } + public IReadOnlyList Documents { get; } + public ProjectRazorJson( string serializedFilePath, string filePath, @@ -24,16 +31,4 @@ public ProjectRazorJson( ProjectWorkspaceState = projectWorkspaceState; Documents = documents; } - - public string SerializedFilePath { get; } - - public string FilePath { get; } - - public RazorConfiguration? Configuration { get; } - - public string? RootNamespace { get; } - - public ProjectWorkspaceState? ProjectWorkspaceState { get; } - - public IReadOnlyList Documents { get; } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectWorkspaceState.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs similarity index 90% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectWorkspaceState.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs index 5d76cc04647..490aebfa13f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectWorkspaceState.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs @@ -8,7 +8,7 @@ using Microsoft.CodeAnalysis.CSharp; using Microsoft.Extensions.Internal; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.ProjectSystem; public sealed class ProjectWorkspaceState : IEquatable { @@ -20,7 +20,7 @@ public sealed class ProjectWorkspaceState : IEquatable public ProjectWorkspaceState( IReadOnlyCollection tagHelpers, LanguageVersion csharpLanguageVersion) - : this((tagHelpers as IReadOnlyList) ?? tagHelpers.ToList(), csharpLanguageVersion) + : this(tagHelpers as IReadOnlyList ?? tagHelpers.ToList(), csharpLanguageVersion) { } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/JsonConverterCollectionExtensions.cs similarity index 93% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/JsonConverterCollectionExtensions.cs index 63796044800..3a87fd75752 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/JsonConverterCollectionExtensions.cs @@ -6,7 +6,7 @@ using System.Collections.Immutable; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization.Converters; internal static class JsonConverterCollectionExtensions { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJsonJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectRazorJsonJsonConverter.cs similarity index 85% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJsonJsonConverter.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectRazorJsonJsonConverter.cs index 21c2eb4eaee..41c3d719572 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectRazorJsonJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectRazorJsonJsonConverter.cs @@ -1,7 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; + +namespace Microsoft.AspNetCore.Razor.Serialization.Converters; internal class ProjectRazorJsonJsonConverter : ObjectJsonConverter { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectSnapshotHandleJsonConverter.cs similarity index 85% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectSnapshotHandleJsonConverter.cs index 8170cf5954d..3edd8e93d15 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandleJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/ProjectSnapshotHandleJsonConverter.cs @@ -1,9 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using Microsoft.CodeAnalysis.Razor.ProjectSystem; - -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization.Converters; internal partial class ProjectSnapshotHandleJsonConverter : ObjectJsonConverter { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperDeltaResultJsonConverter.cs similarity index 95% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperDeltaResultJsonConverter.cs index e0d57f05d55..3935bf3ead2 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperDeltaResultJsonConverter.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization.Converters; internal partial class TagHelperDeltaResultJsonConverter : ObjectJsonConverter { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperResolutionResultJsonConverter.cs similarity index 93% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperResolutionResultJsonConverter.cs index 220c328667d..7f9ac3a7125 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultJsonConverter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/Converters/TagHelperResolutionResultJsonConverter.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization.Converters; internal partial class TagHelperResolutionResultJsonConverter : ObjectJsonConverter { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/DocumentSnapshotHandle.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/DocumentSnapshotHandle.cs index 52f232ddc16..0283c978351 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/DocumentSnapshotHandle.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/DocumentSnapshotHandle.cs @@ -3,7 +3,7 @@ using System; -namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; +namespace Microsoft.AspNetCore.Razor.Serialization; internal sealed class DocumentSnapshotHandle { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataConvert.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataConvert.cs index 103003c4147..8e783e1e9ee 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataConvert.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataConvert.cs @@ -6,7 +6,7 @@ using System.Text; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static class JsonDataConvert { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.Policy.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.Policy.cs index 5918f7c8dde..fbd989465ef 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.Policy.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.Policy.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.ObjectPool; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal partial class JsonDataReader { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs index 51cdb99f292..fabc7fc3796 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataReader.cs @@ -8,7 +8,7 @@ using Microsoft.Extensions.ObjectPool; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal delegate void ReadPropertyValue(JsonDataReader reader, ref TData data); internal delegate T ReadValue(JsonDataReader reader); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.Policy.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.Policy.cs index aa17898b452..f362dbf116f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.Policy.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.Policy.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.ObjectPool; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal partial class JsonDataWriter { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs index 0eea09e6420..13934f8f19c 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs @@ -10,7 +10,7 @@ using Microsoft.Extensions.ObjectPool; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal delegate void WriteProperties(JsonDataWriter writer, T value); internal delegate void WriteValue(JsonDataWriter writer, T value); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonReaderExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonReaderExtensions.cs index bac6f0fdb88..9dc45f580c1 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonReaderExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonReaderExtensions.cs @@ -6,7 +6,7 @@ using System.Runtime.CompilerServices; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static class JsonReaderExtensions { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectJsonConverter`1.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectJsonConverter`1.cs index f332b464c0b..f737c77bdb2 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectJsonConverter`1.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectJsonConverter`1.cs @@ -4,7 +4,7 @@ using System; using Newtonsoft.Json; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal abstract class ObjectJsonConverter : JsonConverter where T : class diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.AllowedChildTagReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.AllowedChildTagReader.cs index 068c02941dc..6e7aeb58aaa 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.AllowedChildTagReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.AllowedChildTagReader.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeParameterReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeParameterReader.cs index 91798029d05..85467347d73 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeParameterReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeParameterReader.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeReader.cs index e311ae35763..13a542a0f85 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.BoundAttributeReader.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs index b092d294053..b57ee5b4ad8 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ConfigurationData.cs @@ -4,7 +4,7 @@ using System; using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DiagnosticData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DiagnosticData.cs index 9bc91317f0d..e336f704133 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DiagnosticData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DiagnosticData.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DocumentSnapshotHandleData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DocumentSnapshotHandleData.cs index 383084f8d99..8201d5815df 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DocumentSnapshotHandleData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.DocumentSnapshotHandleData.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.LanguageVersionData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.LanguageVersionData.cs index c880d2ac1b3..41c0d343b81 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.LanguageVersionData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.LanguageVersionData.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs index 694aae4703a..13d1490adf6 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs @@ -3,9 +3,9 @@ using System; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.ProjectSystem; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs index b49159a95fe..5fa93b3ff71 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.CSharp; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.RequiredAttributeReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.RequiredAttributeReader.cs index f63c191bd8e..0538366f772 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.RequiredAttributeReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.RequiredAttributeReader.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Razor.Language; using static Microsoft.AspNetCore.Razor.Language.RequiredAttributeDescriptor; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.SourceSpanData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.SourceSpanData.cs index fc698e07402..298d4d6c871 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.SourceSpanData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.SourceSpanData.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagHelperReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagHelperReader.cs index 8bcb7aadd41..c2b49ac581f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagHelperReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagHelperReader.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagMatchingRuleReader.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagMatchingRuleReader.cs index 9b3b19edc48..971010462b8 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagMatchingRuleReader.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.TagMatchingRuleReader.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs index 9e76b839668..36e2806d0be 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.cs @@ -5,9 +5,10 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Utilities; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs index 713b2a577bf..ded76c224e2 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs @@ -5,9 +5,10 @@ using System.Diagnostics; using System.Globalization; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Utilities; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static class ObjectWriters { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSerializationFormat.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSerializationFormat.cs index 9a36814f400..d2539cefb99 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSerializationFormat.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSerializationFormat.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static class ProjectSerializationFormat { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandle.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandle.cs index d9ce562e56a..9b8ff9b179d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandle.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ProjectSnapshotHandle.cs @@ -4,7 +4,7 @@ using System; using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; +namespace Microsoft.AspNetCore.Razor.Serialization; internal sealed class ProjectSnapshotHandle { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/PropertyMap`1.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/PropertyMap`1.cs index 6081505d606..36b4ce0ef1c 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/PropertyMap`1.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/PropertyMap`1.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal sealed class PropertyMap where TData : struct diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/RazorSerializationConstants.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/RazorSerializationConstants.cs index aadd04427b0..bf2ec459e40 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/RazorSerializationConstants.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/RazorSerializationConstants.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal static class RazorSerializationConstants { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/SerializedRazorExtension.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/SerializedRazorExtension.cs index b255d2f96d7..14efccbaf20 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/SerializedRazorExtension.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/SerializedRazorExtension.cs @@ -4,7 +4,7 @@ using System; using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal class SerializedRazorExtension : RazorExtension { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs index 2a769bc6dd1..a33c170f8ff 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDeltaResult.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.PooledObjects; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal record TagHelperDeltaResult( bool Delta, diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs index 5c602f89c6b..65414abf4d8 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResult.cs @@ -4,7 +4,7 @@ using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal sealed class TagHelperResolutionResult { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs index e148e8d07d6..21559af967e 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperResolutionResultComparer.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.Extensions.Internal; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Serialization; internal sealed class TagHelperResolutionResultComparer : IEqualityComparer { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/FilePathNormalizer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/FilePathNormalizer.cs similarity index 96% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/FilePathNormalizer.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/FilePathNormalizer.cs index 824f60e22d2..9cd2afb34dc 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/FilePathNormalizer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/FilePathNormalizer.cs @@ -6,7 +6,7 @@ using System.Runtime.InteropServices; using Microsoft.CodeAnalysis.Razor; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Utilities; public static class FilePathNormalizer { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/MemoryCache.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/MemoryCache.cs similarity index 96% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/MemoryCache.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/MemoryCache.cs index f626cfea7d4..409a7c7ee9b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/MemoryCache.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/MemoryCache.cs @@ -6,8 +6,9 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Microsoft.AspNetCore.Razor; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Utilities; // We've created our own MemoryCache here, ideally we would use the one in Microsoft.Extensions.Caching.Memory, // but until we update O# that causes an Assembly load problem. diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/StringCache.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/StringCache.cs similarity index 98% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/StringCache.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/StringCache.cs index 476e8271add..ae145a3b7e3 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/StringCache.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/StringCache.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Utilities; /// /// This class helps de-duplicate dynamically created strings which might otherwise lead to memory bloat. diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorCache.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/TagHelperDescriptorCache.cs similarity index 98% rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorCache.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/TagHelperDescriptorCache.cs index 1a6d01bc841..838d95ae373 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/TagHelperDescriptorCache.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Utilities/TagHelperDescriptorCache.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.Extensions.Internal; -namespace Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +namespace Microsoft.AspNetCore.Razor.Utilities; internal static class TagHelperDescriptorCache { diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultProjectWorkspaceStateGenerator.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultProjectWorkspaceStateGenerator.cs index bc97d60424d..36cf3b6f4dd 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultProjectWorkspaceStateGenerator.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultProjectWorkspaceStateGenerator.cs @@ -9,7 +9,7 @@ using System.Diagnostics; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperResolver.cs index 8ed6b5a6fcc..b133db2486c 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperResolver.cs @@ -6,7 +6,7 @@ using System; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs index 56eb13e6204..0df93cd40ef 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs index 8f180af5be9..2d6831b67b4 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/Extensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/Extensions.cs index 3e2d906a457..990a25756ba 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/Extensions.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/Extensions.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.AspNetCore.Razor; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs index 728b323a0fc..5c7431cd308 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs index d568e50029d..1ceb40f7f35 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs @@ -2,7 +2,8 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.CodeAnalysis.Razor.ProjectSystem; namespace Microsoft.CodeAnalysis.Razor.Workspaces.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs index 898b31290c6..4801414a818 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Razor; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.PooledObjects; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs index d62c661e7c8..af8964f989e 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs index bba6cee14f1..c79b1c85e76 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs @@ -10,7 +10,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs index 848be890a38..a478b0928a2 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs @@ -3,8 +3,9 @@ using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/IRemoteTagHelperProviderService.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/IRemoteTagHelperProviderService.cs index 42d8b746802..4abb929254a 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/IRemoteTagHelperProviderService.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/IRemoteTagHelperProviderService.cs @@ -3,9 +3,8 @@ using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.CodeAnalysis.ExternalAccess.Razor; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; namespace Microsoft.CodeAnalysis.Remote.Razor; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs index 7c3afaa7354..9460c718d3b 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/OOPTagHelperResolver.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs index 0d62200133a..544cf016873 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs @@ -7,7 +7,8 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs index f7943a09665..ce58e1c769f 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceDescriptors.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Immutable; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Newtonsoft.Json; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs index 26ceb412fa7..cf906f6b9f8 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperDeltaProvider.cs @@ -4,7 +4,7 @@ using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.PooledObjects; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.CodeAnalysis.Remote.Razor; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs index 724e2c49a99..9b8f3c33261 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperProviderService.cs @@ -5,12 +5,11 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Api; using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.ServiceHub.Framework; namespace Microsoft.CodeAnalysis.Remote.Razor; @@ -57,8 +56,7 @@ private async ValueTask GetTagHelpersCoreAsync(RazorP return TagHelperResolutionResult.Empty; } - var resolutionResult = await RazorServices.TagHelperResolver.GetTagHelpersAsync(workspaceProject, projectHandle.Configuration, factoryTypeName, cancellationToken).ConfigureAwait(false); - return resolutionResult; + return await RazorServices.TagHelperResolver.GetTagHelpersAsync(workspaceProject, projectHandle.Configuration, factoryTypeName, cancellationToken).ConfigureAwait(false); } public async ValueTask GetTagHelpersDeltaCoreAsync(RazorPinnedSolutionInfoWrapper solutionInfo, ProjectSnapshotHandle projectHandle, string? factoryTypeName, int lastResultId, CancellationToken cancellationToken) diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs index a81a4d7e612..9dccdebd85f 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs index f3863cae8dd..f5520686b6b 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/TagHelperResultCache.cs @@ -3,7 +3,7 @@ using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; namespace Microsoft.CodeAnalysis.Remote.Razor; diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorBreakpointResolver.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorBreakpointResolver.cs index dba8f248ba2..efefaefe108 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorBreakpointResolver.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorBreakpointResolver.cs @@ -6,7 +6,7 @@ using System.Diagnostics; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.VisualStudio.Editor.Razor.Debugging; using Microsoft.VisualStudio.LanguageServer.ContainedLanguage; using Microsoft.VisualStudio.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorProximityExpressionResolver.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorProximityExpressionResolver.cs index b5709040ba0..08643a392d0 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorProximityExpressionResolver.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/Debugging/DefaultRazorProximityExpressionResolver.cs @@ -7,7 +7,7 @@ using System.Diagnostics; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.VisualStudio.Editor.Razor.Debugging; using Microsoft.VisualStudio.LanguageServer.ContainedLanguage; using Microsoft.VisualStudio.LanguageServer.Protocol; diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs index e9a647c12ca..be6dac51a4c 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LanguageServerClient.Razor/ProjectRazorJsonPublisher.cs @@ -7,7 +7,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces; diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Host/DefaultProjectSnapshotManagerProxy.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Host/DefaultProjectSnapshotManagerProxy.cs index b128145ed0f..28e3286522b 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Host/DefaultProjectSnapshotManagerProxy.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Host/DefaultProjectSnapshotManagerProxy.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.Threading; diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/ProjectSnapshotHandleProxy.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/ProjectSnapshotHandleProxy.cs index c2dbca5bf16..8168b64596f 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/ProjectSnapshotHandleProxy.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/ProjectSnapshotHandleProxy.cs @@ -3,7 +3,7 @@ using System; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; namespace Microsoft.VisualStudio.LiveShare.Razor; diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs index dbdc3ad6a5a..f2750c3a322 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/LiveShareJsonConverterCollectionExtensions.cs @@ -2,8 +2,8 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Newtonsoft.Json; +using Microsoft.AspNetCore.Razor.Serialization.Converters; namespace Microsoft.VisualStudio.LiveShare.Razor.Serialization; diff --git a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs index 487c73a5636..4d495b673fc 100644 --- a/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs +++ b/src/Razor/src/Microsoft.VisualStudio.LiveShare.Razor/Serialization/ProjectSnapshotHandleProxyJsonConverter.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; namespace Microsoft.VisualStudio.LiveShare.Razor.Serialization; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/FilePathNormalizerTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/FilePathNormalizerTest.cs index 309844a4816..0417b3f5a65 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/FilePathNormalizerTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/FilePathNormalizerTest.cs @@ -3,8 +3,8 @@ #nullable disable -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; +using Microsoft.AspNetCore.Razor.Utilities; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs index fa577cde684..e2a30dae353 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs @@ -4,10 +4,11 @@ using System; using System.Linq; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Xunit; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs index 7351c6a182a..2daf5f81673 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/LanguageServerTestBase.cs @@ -11,11 +11,11 @@ using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/TestProjectSnapshot.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/TestProjectSnapshot.cs index 812b0597323..427d4d17548 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/TestProjectSnapshot.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test.Common/TestProjectSnapshot.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/AutoInsert/OnAutoInsertEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/AutoInsert/OnAutoInsertEndpointTest.cs index 86bde565191..a7404823ffc 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/AutoInsert/OnAutoInsertEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/AutoInsert/OnAutoInsertEndpointTest.cs @@ -5,7 +5,6 @@ using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Formatting; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/AddUsingsCodeActionResolverTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/AddUsingsCodeActionResolverTest.cs index 4e527b3380c..013806ccd21 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/AddUsingsCodeActionResolverTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/AddUsingsCodeActionResolverTest.cs @@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Moq; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CodeActionEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CodeActionEndpointTest.cs index 380eb5b13b4..5f7ec447e6a 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CodeActionEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CodeActionEndpointTest.cs @@ -9,8 +9,6 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; -using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.Test.Common; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/CreateComponentCodeActionResolverTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/CreateComponentCodeActionResolverTest.cs index 906794c652d..1db009a9152 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/CreateComponentCodeActionResolverTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/CreateComponentCodeActionResolverTest.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ExtractToCodeBehindCodeActionResolverTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ExtractToCodeBehindCodeActionResolverTest.cs index 9b5ce7da1a5..7949b293edd 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ExtractToCodeBehindCodeActionResolverTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ExtractToCodeBehindCodeActionResolverTest.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/LegacyRazorCompletionEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/LegacyRazorCompletionEndpointTest.cs index aff699513cf..50ca84eee1d 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/LegacyRazorCompletionEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/LegacyRazorCompletionEndpointTest.cs @@ -8,7 +8,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Components; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.Tooltip; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Debugging/RazorBreakpointSpanEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Debugging/RazorBreakpointSpanEndpointTest.cs index 379953a4487..715423352b9 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Debugging/RazorBreakpointSpanEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Debugging/RazorBreakpointSpanEndpointTest.cs @@ -4,8 +4,6 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; -using Microsoft.AspNetCore.Razor.LanguageServer.Debugging; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; using Microsoft.AspNetCore.Razor.Test.Common; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs index 09eb691c07d..fd7a5e5a6e2 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs @@ -10,7 +10,8 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentTextPresentationEndpointTests.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentTextPresentationEndpointTests.cs index 8b0fa97ffcb..bb4e7ad0471 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentTextPresentationEndpointTests.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentTextPresentationEndpointTests.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.VisualStudio.LanguageServer.Protocol; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentUriPresentationEndpointTests.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentUriPresentationEndpointTests.cs index 680aabc3145..8f5c2b3a292 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentUriPresentationEndpointTests.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DocumentPresentation/TextDocumentUriPresentationEndpointTests.cs @@ -2,15 +2,12 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Diagnostics.Eventing.Reader; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.Test.Common; -using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LanguageServer.Protocol; using Moq; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/DocumentRangeFormattingEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/DocumentRangeFormattingEndpointTest.cs index f7439add01f..be0aae1e3bb 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/DocumentRangeFormattingEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/DocumentRangeFormattingEndpointTest.cs @@ -4,7 +4,6 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.VisualStudio.LanguageServer.Protocol; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingLanguageServerClient.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingLanguageServerClient.cs index 28bc28625c3..100388cbfbd 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingLanguageServerClient.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingLanguageServerClient.cs @@ -15,7 +15,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs index 4d6add8be25..f5d3a2376c9 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs @@ -14,7 +14,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; @@ -39,8 +39,8 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Formatting; [Collection("FormattingTestSerialRuns")] public class FormattingTestBase : RazorIntegrationTestBase { - private static readonly AsyncLocal s_fileName = new AsyncLocal(); - private static readonly IReadOnlyList s_defaultComponents = GetDefaultRuntimeComponents(); + private static readonly AsyncLocal s_fileName = new(); + private static readonly ImmutableArray s_defaultComponents = GetDefaultRuntimeComponents(); public FormattingTestBase(ITestOutputHelper testOutput) : base(testOutput) @@ -335,7 +335,7 @@ private static string GetProjectDirectory() return null; } - private static IReadOnlyList GetDefaultRuntimeComponents() + private static ImmutableArray GetDefaultRuntimeComponents() { var bytes = TestResources.GetResourceBytes(TestResources.BlazorServerAppTagHelpersJson); @@ -343,8 +343,7 @@ private static IReadOnlyList GetDefaultRuntimeComponents() using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArray( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))) - ?? Array.Empty(); + static r => r.ReadImmutableArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))); } } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Hover/HoverInfoServiceTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Hover/HoverInfoServiceTest.cs index d2ae2455648..a2054d06944 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Hover/HoverInfoServiceTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Hover/HoverInfoServiceTest.cs @@ -14,7 +14,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Tooltip; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.AspNetCore.Razor.Test.Common.Mef; using Microsoft.CodeAnalysis.CSharp; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs index c9ea08dcb18..17ba8cf7e83 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Razor; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs index 94032364569..a7d00cd4d3d 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs @@ -6,9 +6,9 @@ using System; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Moq; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs index c9e79c6ff63..1782ce4d81a 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs @@ -10,10 +10,10 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Moq; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorCodeDocumentExtensionsTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorCodeDocumentExtensionsTest.cs index 3de868623e2..dc2608bb1fe 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorCodeDocumentExtensionsTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorCodeDocumentExtensionsTest.cs @@ -4,7 +4,6 @@ #nullable disable using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorLanguageEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorLanguageEndpointTest.cs index 364820e913a..a7e5e512830 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorLanguageEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/RazorLanguageEndpointTest.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.CodeGeneration; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs index 7c68d0d077b..6d78c7b5363 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs @@ -17,7 +17,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.AspNetCore.Razor.Test.Common.Mef; using Microsoft.CodeAnalysis.CSharp; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/WrapWithTag/WrapWithTagEndpointTests.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/WrapWithTag/WrapWithTagEndpointTests.cs index 75905777c69..e49d9fb422e 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/WrapWithTag/WrapWithTagEndpointTests.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/WrapWithTag/WrapWithTagEndpointTests.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Formatting; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.OmniSharpPlugin.Test/OmniSharpTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.OmniSharpPlugin.Test/OmniSharpTestBase.cs index ba7c58fb8c1..6125d604a75 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.OmniSharpPlugin.Test/OmniSharpTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.OmniSharpPlugin.Test/OmniSharpTestBase.cs @@ -11,7 +11,7 @@ using Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Project; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/MemoryCacheTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/MemoryCacheTest.cs index c2bc1d16e50..3387dd7eab1 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/MemoryCacheTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/MemoryCacheTest.cs @@ -9,8 +9,8 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; +using Microsoft.AspNetCore.Razor.Utilities; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs index f38ac1187cc..045a5e86e8f 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Host; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs index 8c190de2488..3ab2709be30 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Text; using Xunit; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs index 9c06bc7601f..1d488968934 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs index b28685524fd..5819b68bf1f 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Text; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/RazorConfigurationSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/RazorConfigurationSerializationTest.cs index cf55f8653ad..41f213e6a6d 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/RazorConfigurationSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/RazorConfigurationSerializationTest.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Xunit; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/StringCacheTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/StringCacheTest.cs index 57b44484317..437eb069040 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/StringCacheTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/StringCacheTest.cs @@ -4,8 +4,8 @@ #nullable disable using System; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; +using Microsoft.AspNetCore.Razor.Utilities; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs index d89762ec8c2..c296ef45a86 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Serialization/TagHelperDescriptorSerializationTest.cs @@ -6,7 +6,7 @@ using System.IO; using System.Text; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs index 384c9200d0e..0adf0e3864e 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs @@ -6,7 +6,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs index 83ccd9ff90d..a4f3c57f6ce 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/TagHelperDescriptorCacheTest.cs @@ -1,13 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.IO; using System.Linq; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Test.Common; +using Microsoft.AspNetCore.Razor.Utilities; using Xunit; using Xunit.Abstractions; @@ -65,7 +66,7 @@ public void GetHashCode_DuplicateTagHelpers_NoCacheIdCollisions() { var tagHelpersBatch = ReadTagHelpers(); tagHelpers.AddRange(tagHelpersBatch); - tagHelpersPerBatch = tagHelpersBatch.Count; + tagHelpersPerBatch = tagHelpersBatch.Length; } // Act @@ -86,10 +87,10 @@ public void GetHashCode_AllTagHelpers_NoCacheIdCollisions() var hashes = new HashSet(tagHelpers.Select(TagHelperDescriptorCache.GetTagHelperDescriptorCacheId)); // Assert - Assert.Equal(hashes.Count, tagHelpers.Count); + Assert.Equal(hashes.Count, tagHelpers.Length); } - private static IReadOnlyList ReadTagHelpers() + private static ImmutableArray ReadTagHelpers() { var bytes = TestResources.GetResourceBytes(TestResources.BlazorServerAppTagHelpersJson); @@ -97,8 +98,7 @@ private static IReadOnlyList ReadTagHelpers() using var reader = new StreamReader(stream); return JsonDataConvert.DeserializeData(reader, - static r => r.ReadArray( - static r => ObjectReaders.ReadTagHelper(r, useCache: false))) - ?? Array.Empty(); + static r => r.ReadImmutableArray( + static r => ObjectReaders.ReadTagHelper(r, useCache: false))); } } diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs index 25f140a2847..6de92015e46 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/OOPTagHelperResolverTest.cs @@ -9,7 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.AspNetCore.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs index 606c757d257..e6a259c74f5 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/ProjectSnapshotHandleSerializationTest.cs @@ -5,7 +5,8 @@ using System.Linq; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Newtonsoft.Json; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs index e7fce58905a..160e54c1110 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/Serialization/TagHelperResolutionResultSerializationTest.cs @@ -8,7 +8,8 @@ using System.Text; using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; +using Microsoft.AspNetCore.Razor.Serialization.Converters; using Microsoft.AspNetCore.Razor.Test.Common; using Newtonsoft.Json; using Xunit; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs index a1962ea5e34..fcb89cc5a17 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Remote.Razor.Test/TagHelperDeltaResultTest.cs @@ -3,7 +3,7 @@ using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.CodeAnalysis.Remote.Razor.Test; using Xunit; using Xunit.Abstractions; diff --git a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectSnapshotProjectEngineFactoryTest.cs b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectSnapshotProjectEngineFactoryTest.cs index fa1af9f17d2..2c0e9b380a5 100644 --- a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectSnapshotProjectEngineFactoryTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectSnapshotProjectEngineFactoryTest.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces; diff --git a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs index f083f666637..506767b556b 100644 --- a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs @@ -9,7 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Xunit; diff --git a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs index b1587e3b476..ed6ae07f7b4 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs @@ -7,7 +7,7 @@ using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces; diff --git a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/TestLSPDocumentMappingProvider.cs b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/TestLSPDocumentMappingProvider.cs index 939a678f63a..e5187c53f1a 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/TestLSPDocumentMappingProvider.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/TestLSPDocumentMappingProvider.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer; -using Microsoft.AspNetCore.Razor.LanguageServer.Common.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test.Common; using Microsoft.Extensions.Logging; diff --git a/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs b/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs index c97bbc0f94a..6719995da53 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs @@ -9,7 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Text; using Moq; diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs index 78bb79e2d11..fea93c60aa3 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LiveShare.Razor.Test; diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs index 5d2a03757c6..3d91afbaafd 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LiveShare.Razor.Test; diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs index 9a2484d6a35..fcb1e12ad14 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs @@ -3,7 +3,7 @@ using System; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization; +using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.VisualStudio.LiveShare.Razor.Serialization; using Newtonsoft.Json; From 921796e297c08f6700a19e39650ca3f6a7ede661 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 13:56:38 -0700 Subject: [PATCH 13/15] Use ImmutableArray in ProjectWorkspaceState and IProjectSnapshot --- .../src/Properties/AssemblyInfo.cs | 1 + .../ProjectRazorJsonSerializationBenchmark.cs | 4 +- .../DefaultRazorProjectService.cs | 2 +- .../ProjectSystem/ProjectWorkspaceState.cs | 19 ++-- ...ObjectReaders.ProjectWorkspaceStateData.cs | 10 +-- .../ProjectSystem/EphemeralProjectSnapshot.cs | 2 +- .../ProjectSystem/IProjectSnapshot.cs | 2 +- .../ProjectSystem/ProjectSnapshot.cs | 2 +- .../ProjectSystem/ProjectState.cs | 3 +- .../RazorServiceBase.cs | 2 +- .../DefaultVisualStudioDocumentTracker.cs | 5 +- .../VisualStudioDocumentTracker.cs | 3 +- .../SerializationTest.cs | 9 +- .../DefaultCSharpCodeActionProviderTest.cs | 3 +- ...TypeAccessibilityCodeActionProviderTest.cs | 5 +- .../Html/DefaultHtmlCodeActionProviderTest.cs | 4 +- ...nentAccessibilityCodeActionProviderTest.cs | 5 +- .../TagHelperCompletionProviderTest.cs | 9 +- .../Completion/TagHelperServiceTestBase.cs | 28 ++++-- .../DefaultRazorProjectServiceTest.cs | 3 +- .../DefaultTagHelperFactsServiceTest.cs | 5 +- .../Formatting/CodeDirectiveFormattingTest.cs | 13 +-- .../FormattingContentValidationPassTest.cs | 6 +- .../FormattingDiagnosticValidationPassTest.cs | 4 +- .../Formatting/FormattingTestBase.cs | 9 +- .../Formatting/HtmlFormattingTest.cs | 16 ++-- .../OpenDocumentGeneratorTest.cs | 7 +- ...ojectConfigurationStateSynchronizerTest.cs | 17 ++-- .../Refactoring/RenameEndpointTest.cs | 20 +++-- .../DefaultProjectSnapshotTest.cs | 9 +- .../ProjectSystem/DocumentStateTest.cs | 8 +- .../ProjectStateGeneratedOutputTest.cs | 14 ++- .../ProjectSystem/ProjectStateTest.cs | 86 ++++++++++++++----- .../Shared/TestTagHelperResolver.cs | 3 +- ...faultProjectWorkspaceStateGeneratorTest.cs | 19 ++-- .../ProjectRazorJsonPublisherTest.cs | 16 ++-- .../DefaultProjectSnapshotManagerTest.cs | 21 +++-- ...ojectSnapshotSynchronizationServiceTest.cs | 30 +++++-- .../DefaultProjectSnapshotManagerProxyTest.cs | 28 +++--- .../SerializationTest.cs | 7 +- 40 files changed, 273 insertions(+), 186 deletions(-) diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs index 87cd4e7b3ed..923521b88fa 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs @@ -35,6 +35,7 @@ [assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServerClient.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LiveShare.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Microbenchmarks.Compiler, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Microbenchmarks, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs index 37719eacf4d..2f3222140f4 100644 --- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs +++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs @@ -57,7 +57,7 @@ public void Deserialize() var projectRazorJson = DeserializeProjectRazorJson(reader); if (projectRazorJson.ProjectWorkspaceState is null || - projectRazorJson.ProjectWorkspaceState.TagHelpers.Count != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Count) + projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length) { throw new InvalidDataException(); } @@ -79,7 +79,7 @@ public void RoundTrip() var projectRazorJson = DeserializeProjectRazorJson(reader); if (projectRazorJson.ProjectWorkspaceState is null || - projectRazorJson.ProjectWorkspaceState.TagHelpers.Count != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Count) + projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length) { throw new InvalidDataException(); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs index d8696cbfaae..13c7ca809e3 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/DefaultRazorProjectService.cs @@ -275,7 +275,7 @@ public override void UpdateProject( if (!projectWorkspaceState.Equals(ProjectWorkspaceState.Default)) { _logger.LogInformation("Updating project '{filePath}' TagHelpers ({projectWorkspaceState.TagHelpers.Count}) and C# Language Version ({projectWorkspaceState.CSharpLanguageVersion}).", - filePath, projectWorkspaceState.TagHelpers.Count, projectWorkspaceState.CSharpLanguageVersion); + filePath, projectWorkspaceState.TagHelpers.Length, projectWorkspaceState.CSharpLanguageVersion); } _projectSnapshotManagerAccessor.Instance.ProjectWorkspaceStateChanged(project.FilePath, projectWorkspaceState); diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs index 490aebfa13f..0b814b281de 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectWorkspaceState.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.CSharp; @@ -12,28 +12,21 @@ namespace Microsoft.AspNetCore.Razor.ProjectSystem; public sealed class ProjectWorkspaceState : IEquatable { - public static readonly ProjectWorkspaceState Default = new(Array.Empty(), LanguageVersion.Default); + public static readonly ProjectWorkspaceState Default = new(ImmutableArray.Empty, LanguageVersion.Default); - public IReadOnlyList TagHelpers { get; } + public ImmutableArray TagHelpers { get; } public LanguageVersion CSharpLanguageVersion { get; } public ProjectWorkspaceState( - IReadOnlyCollection tagHelpers, + ImmutableArray tagHelpers, LanguageVersion csharpLanguageVersion) - : this(tagHelpers as IReadOnlyList ?? tagHelpers.ToList(), csharpLanguageVersion) { - } - - public ProjectWorkspaceState( - IReadOnlyList tagHelpers, - LanguageVersion csharpLanguageVersion) - { - TagHelpers = tagHelpers ?? throw new ArgumentNullException(nameof(tagHelpers)); + TagHelpers = tagHelpers; CSharpLanguageVersion = csharpLanguageVersion; } public override bool Equals(object? obj) - => Equals(obj as ProjectWorkspaceState); + => obj is ProjectWorkspaceState other && Equals(other); public bool Equals(ProjectWorkspaceState? other) => other is not null && diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs index 5fa93b3ff71..f160943b6e1 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectWorkspaceStateData.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.CSharp; @@ -9,17 +9,15 @@ namespace Microsoft.AspNetCore.Razor.Serialization; internal static partial class ObjectReaders { - private record struct ProjectWorkspaceStateData(TagHelperDescriptor[] TagHelpers, LanguageVersion CSharpLanguageVersion) + private record struct ProjectWorkspaceStateData(ImmutableArray TagHelpers, LanguageVersion CSharpLanguageVersion) { public static readonly PropertyMap PropertyMap = new( (nameof(TagHelpers), ReadTagHelpers), (nameof(CSharpLanguageVersion), ReadCSharpLanguageVersion)); private static void ReadTagHelpers(JsonDataReader reader, ref ProjectWorkspaceStateData data) - => data.TagHelpers = reader.ReadArray( - static r => r.ReadNonNullObject( - static r => ReadTagHelperFromProperties(r, useCache: true))) - ?? Array.Empty(); + => data.TagHelpers = reader.ReadImmutableArray( + static r => ReadTagHelper(r, useCache: true)); private static void ReadCSharpLanguageVersion(JsonDataReader reader, ref ProjectWorkspaceStateData data) => data.CSharpLanguageVersion = (LanguageVersion)reader.ReadInt32(); diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs index 2d6831b67b4..b408267a092 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/EphemeralProjectSnapshot.cs @@ -46,7 +46,7 @@ public EphemeralProjectSnapshot(HostWorkspaceServices services, string filePath) public LanguageVersion CSharpLanguageVersion => LanguageVersion.Default; - public IReadOnlyList TagHelpers => Array.Empty(); + public ImmutableArray TagHelpers => ImmutableArray.Empty; public ProjectWorkspaceState? ProjectWorkspaceState => null; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs index 5c7431cd308..f8548d4601b 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshot.cs @@ -17,7 +17,7 @@ internal interface IProjectSnapshot string? RootNamespace { get; } VersionStamp Version { get; } LanguageVersion CSharpLanguageVersion { get; } - IReadOnlyList TagHelpers { get; } + ImmutableArray TagHelpers { get; } ProjectWorkspaceState? ProjectWorkspaceState { get; } RazorProjectEngine GetProjectEngine(); diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs index 4801414a818..2fc25eba1e1 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs @@ -42,7 +42,7 @@ public ProjectSnapshot(ProjectState state) public virtual VersionStamp Version => State.Version; - public IReadOnlyList TagHelpers => State.TagHelpers; + public ImmutableArray TagHelpers => State.TagHelpers; public ProjectWorkspaceState? ProjectWorkspaceState => State.ProjectWorkspaceState; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs index c79b1c85e76..634a7e07b26 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs @@ -33,7 +33,6 @@ internal class ProjectState private static readonly ImmutableDictionary s_emptyDocuments = ImmutableDictionary.Create(FilePathComparer.Instance); private static readonly ImmutableDictionary> s_emptyImportsToRelatedDocuments = ImmutableDictionary.Create>(FilePathComparer.Instance); - private static readonly IReadOnlyList s_emptyTagHelpers = Array.Empty(); private readonly object _lock; private RazorProjectEngine _projectEngine; @@ -163,7 +162,7 @@ private ProjectState( public HostWorkspaceServices Services { get; } - public IReadOnlyList TagHelpers => ProjectWorkspaceState?.TagHelpers ?? s_emptyTagHelpers; + public ImmutableArray TagHelpers => ProjectWorkspaceState?.TagHelpers ?? ImmutableArray.Empty; public LanguageVersion CSharpLanguageVersion => ProjectWorkspaceState?.CSharpLanguageVersion ?? LanguageVersion.Default; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs index 544cf016873..380c9959a94 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs @@ -71,7 +71,7 @@ public SerializedProjectSnapshot(string filePath, RazorConfiguration? configurat public LanguageVersion CSharpLanguageVersion => LanguageVersion.Default; - public IReadOnlyList TagHelpers => Array.Empty(); + public ImmutableArray TagHelpers => ImmutableArray.Empty; public ProjectWorkspaceState? ProjectWorkspaceState => null; diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs index fd566630217..199916bec91 100644 --- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs +++ b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -107,7 +108,7 @@ public DefaultVisualStudioDocumentTracker( public override ClientSpaceSettings EditorSettings => _workspaceEditorSettings.Current.ClientSpaceSettings; - public override IReadOnlyList? TagHelpers => ProjectSnapshot?.TagHelpers; + public override ImmutableArray TagHelpers => ProjectSnapshot?.TagHelpers ?? ImmutableArray.Empty; public override bool IsSupportedProject => _isSupportedProject; @@ -250,7 +251,7 @@ internal void ProjectManager_Changed(object sender, ProjectChangeEventArgs e) _ = OnContextChangedAsync(ContextChangeKind.ProjectChanged); if (e.Older is null || - !Enumerable.SequenceEqual(e.Older.TagHelpers, e.Newer!.TagHelpers)) + !e.Older.TagHelpers.SequenceEqual(e.Newer!.TagHelpers)) { _ = OnContextChangedAsync(ContextChangeKind.TagHelpersChanged); } diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs index f6793468fd2..6c03b4671ab 100644 --- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs +++ b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor.Editor; @@ -20,7 +21,7 @@ public abstract class VisualStudioDocumentTracker public abstract ClientSpaceSettings EditorSettings { get; } - public abstract IReadOnlyList? TagHelpers { get; } + public abstract ImmutableArray TagHelpers { get; } public abstract bool IsSupportedProject { get; } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs index e2a30dae353..99c3b8c7161 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using System.Linq; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -27,11 +28,9 @@ public SerializationTest(ITestOutputHelper testOutput) new SerializedRazorExtension("TestExtension"), }; Configuration = RazorConfiguration.Create(languageVersion, "Custom", extensions); - ProjectWorkspaceState = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("Test", "TestAssembly").Build(), - }, - LanguageVersion.LatestMajor); + ProjectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("Test", "TestAssembly").Build()), + csharpLanguageVersion: LanguageVersion.LatestMajor); } private RazorConfiguration Configuration { get; } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/DefaultCSharpCodeActionProviderTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/DefaultCSharpCodeActionProviderTest.cs index 13aebb9ff02..d513a7779c3 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/DefaultCSharpCodeActionProviderTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/DefaultCSharpCodeActionProviderTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -327,7 +328,7 @@ private static RazorCodeActionContext CreateRazorCodeActionContext( bool supportsFileCreation = true, bool supportsCodeActionResolve = true) { - var tagHelpers = Array.Empty(); + var tagHelpers = ImmutableArray.Empty; var sourceDocument = TestRazorSourceDocument.Create(text, filePath: filePath, relativePath: filePath); var projectEngine = RazorProjectEngine.Create(builder => builder.AddTagHelpers(tagHelpers)); var codeDocument = projectEngine.ProcessDesignTime(sourceDocument, FileKinds.Component, Array.Empty(), tagHelpers); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/TypeAccessibilityCodeActionProviderTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/TypeAccessibilityCodeActionProviderTest.cs index 6f5e954e298..2636d250a7a 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/TypeAccessibilityCodeActionProviderTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/CSharp/TypeAccessibilityCodeActionProviderTest.cs @@ -2,13 +2,14 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Components; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; using Microsoft.AspNetCore.Razor.LanguageServer.Common; -using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces.Extensions; @@ -458,7 +459,7 @@ private static RazorCodeActionContext CreateRazorCodeActionContext( var fullyQualifiedComponent = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "Fully.Qualified.Component", "TestAssembly"); fullyQualifiedComponent.TagMatchingRule(rule => rule.TagName = "Fully.Qualified.Component"); - var tagHelpers = new[] { shortComponent.Build(), fullyQualifiedComponent.Build() }; + var tagHelpers = ImmutableArray.Create(shortComponent.Build(), fullyQualifiedComponent.Build()); var sourceDocument = TestRazorSourceDocument.Create(text, filePath: filePath, relativePath: filePath); var projectEngine = RazorProjectEngine.Create(builder => diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Html/DefaultHtmlCodeActionProviderTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Html/DefaultHtmlCodeActionProviderTest.cs index ccdd02626f1..5b18871b9e7 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Html/DefaultHtmlCodeActionProviderTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Html/DefaultHtmlCodeActionProviderTest.cs @@ -2,11 +2,11 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.CodeActions.Models; -using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; @@ -153,7 +153,7 @@ private static RazorCodeActionContext CreateRazorCodeActionContext( bool supportsFileCreation = true, bool supportsCodeActionResolve = true) { - var tagHelpers = Array.Empty(); + var tagHelpers = ImmutableArray.Empty; var sourceDocument = TestRazorSourceDocument.Create(text, filePath: filePath, relativePath: filePath); var projectEngine = RazorProjectEngine.Create(builder => builder.AddTagHelpers(tagHelpers)); var codeDocument = projectEngine.ProcessDesignTime(sourceDocument, FileKinds.Component, Array.Empty(), tagHelpers); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ComponentAccessibilityCodeActionProviderTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ComponentAccessibilityCodeActionProviderTest.cs index 28c996022ec..54332d62781 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ComponentAccessibilityCodeActionProviderTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/CodeActions/Razor/ComponentAccessibilityCodeActionProviderTest.cs @@ -2,10 +2,11 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Components; -using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Workspaces.Extensions; @@ -362,7 +363,7 @@ private static RazorCodeActionContext CreateRazorCodeActionContext(VSCodeActionP var fullyQualifiedGenericComponent = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "Fully.Qualified.GenericComponent", "TestAssembly"); fullyQualifiedGenericComponent.TagMatchingRule(rule => rule.TagName = "Fully.Qualified.GenericComponent"); - var tagHelpers = new[] { shortComponent.Build(), fullyQualifiedComponent.Build(), shortGenericComponent.Build(), fullyQualifiedGenericComponent.Build() }; + var tagHelpers = ImmutableArray.Create(shortComponent.Build(), fullyQualifiedComponent.Build(), shortGenericComponent.Build(), fullyQualifiedGenericComponent.Build()); var sourceDocument = TestRazorSourceDocument.Create(text, filePath: filePath, relativePath: filePath); var projectEngine = RazorProjectEngine.Create(builder => builder.AddTagHelpers(tagHelpers)); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperCompletionProviderTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperCompletionProviderTest.cs index 8dfa38df048..af70198e76d 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperCompletionProviderTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperCompletionProviderTest.cs @@ -4,6 +4,7 @@ #nullable disable using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Legacy; using Microsoft.AspNetCore.Razor.Language.Syntax; @@ -390,7 +391,7 @@ public void GetCompletionAt_AtAttributeEdge_IndexerBoolAttribute_ReturnsCompleti """, isRazorFile: false, - tagHelpers: tagHelper.Build()); + tagHelpers: ImmutableArray.Create(tagHelper.Build())); // Act var completions = service.GetCompletionItems(context); @@ -433,7 +434,7 @@ public void GetCompletionAt_AtAttributeEdge_IndexerAttribute_ReturnsCompletions( """, isRazorFile: false, - tagHelpers: tagHelper.Build()); + tagHelpers: ImmutableArray.Create(tagHelper.Build())); // Act var completions = service.GetCompletionItems(context); @@ -760,8 +761,10 @@ private static void AssertTest1Test2Completions(IReadOnlyList tagHelpers = default) { + tagHelpers = tagHelpers.NullToEmpty(); + TestFileMarkupParser.GetPosition(markup, out var documentContent, out var position); var codeDocument = CreateCodeDocument(documentContent, isRazorFile, tagHelpers); var syntaxTree = codeDocument.GetSyntaxTree(); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperServiceTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperServiceTestBase.cs index e6ac2b80712..9bdd0271fd1 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperServiceTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/TagHelperServiceTestBase.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading; using Microsoft.AspNetCore.Razor.Language; @@ -24,7 +25,7 @@ public abstract class TagHelperServiceTestBase : LanguageServerTestBase protected const string CSHtmlFile = "test.cshtml"; protected const string RazorFile = "test.razor"; - protected TagHelperDescriptor[] DefaultTagHelpers { get; } + protected ImmutableArray DefaultTagHelpers { get; } protected RazorTagHelperCompletionService RazorTagHelperCompletionService { get; } internal HtmlFactsService HtmlFactsService { get; } protected TagHelperFactsService TagHelperFactsService { get; } @@ -182,22 +183,25 @@ public TagHelperServiceTestBase(ITestOutputHelper testOutput) attribute.TypeName = typeof(bool).FullName; }); - DefaultTagHelpers = new[] - { + DefaultTagHelpers = ImmutableArray.Create( builder1.Build(), builder1WithRequiredParent.Build(), builder2.Build(), builder3.Build(), directiveAttribute1.Build(), directiveAttribute2.Build(), - htmlTagMutator.Build() - }; + htmlTagMutator.Build()); HtmlFactsService = new DefaultHtmlFactsService(); TagHelperFactsService = new DefaultTagHelperFactsService(); RazorTagHelperCompletionService = new DefaultRazorTagHelperCompletionService(TagHelperFactsService); } + internal static RazorCodeDocument CreateCodeDocument(string text, bool isRazorFile, ImmutableArray tagHelpers) + { + return CreateCodeDocument(text, isRazorFile ? RazorFile : CSHtmlFile, tagHelpers); + } + internal static RazorCodeDocument CreateCodeDocument(string text, bool isRazorFile, params TagHelperDescriptor[] tagHelpers) { return CreateCodeDocument(text, isRazorFile ? RazorFile : CSHtmlFile, tagHelpers); @@ -215,7 +219,7 @@ protected static TextDocumentIdentifier GetIdentifier(bool isRazor) internal static (Queue, Queue) CreateDocumentContext( DocumentContentVersion[] textArray, bool[] isRazorArray, - TagHelperDescriptor[] tagHelpers, + ImmutableArray tagHelpers, VersionStamp projectVersion = default, int? documentVersion = null) { @@ -249,9 +253,10 @@ internal static (Queue, Queue) return (documentContexts, identifiers); } - internal static RazorCodeDocument CreateCodeDocument(string text, string filePath, params TagHelperDescriptor[] tagHelpers) + internal static RazorCodeDocument CreateCodeDocument(string text, string filePath, ImmutableArray tagHelpers) { - tagHelpers ??= Array.Empty(); + tagHelpers = tagHelpers.NullToEmpty(); + var sourceDocument = TestRazorSourceDocument.Create(text, filePath: filePath, relativePath: filePath); var projectEngine = RazorProjectEngine.Create(builder => { }); var fileKind = filePath.EndsWith(".razor", StringComparison.Ordinal) ? FileKinds.Component : FileKinds.Legacy; @@ -260,5 +265,12 @@ internal static RazorCodeDocument CreateCodeDocument(string text, string filePat return codeDocument; } + internal static RazorCodeDocument CreateCodeDocument(string text, string filePath, params TagHelperDescriptor[] tagHelpers) + { + tagHelpers ??= Array.Empty(); + + return CreateCodeDocument(text, filePath, tagHelpers.ToImmutableArray()); + } + internal record DocumentContentVersion(string Content, int Version = 0); } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs index fd7a5e5a6e2..a2a671ef0d5 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultRazorProjectServiceTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -42,7 +43,7 @@ public void UpdateProject_UpdatesProjectWorkspaceState() var hostProject = new HostProject("C:/path/to/project.csproj", RazorConfiguration.Default, "TestRootNamespace"); projectManager.ProjectAdded(hostProject); var projectService = CreateProjectService(new TestProjectResolver(), projectManager); - var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty(), LanguageVersion.LatestMajor); + var projectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.LatestMajor); // Act projectService.UpdateProject(hostProject.FilePath, hostProject.Configuration, hostProject.RootNamespace, projectWorkspaceState, _emptyDocuments); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultTagHelperFactsServiceTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultTagHelperFactsServiceTest.cs index be9ab3ebbbf..a61bc7e2e35 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultTagHelperFactsServiceTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/DefaultTagHelperFactsServiceTest.cs @@ -4,6 +4,7 @@ #nullable disable using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language.Legacy; using Microsoft.AspNetCore.Razor.Language.Syntax; @@ -246,9 +247,9 @@ public void StringifyAttributes_IgnoresMiscContent() }); } - private static RazorCodeDocument CreateComponentDocument(string text, params TagHelperDescriptor[] tagHelpers) + private static RazorCodeDocument CreateComponentDocument(string text, ImmutableArray tagHelpers) { - tagHelpers ??= Array.Empty(); + tagHelpers = tagHelpers.NullToEmpty(); var sourceDocument = TestRazorSourceDocument.Create(text); var projectEngine = RazorProjectEngine.Create(builder => { }); var codeDocument = projectEngine.ProcessDesignTime(sourceDocument, FileKinds.Component, Array.Empty(), tagHelpers); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/CodeDirectiveFormattingTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/CodeDirectiveFormattingTest.cs index 3cf4a7e6166..f372dd15e9d 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/CodeDirectiveFormattingTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/CodeDirectiveFormattingTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Test.Common; @@ -1815,7 +1816,7 @@ public RenderFragment RenderFoo() """); } - private IReadOnlyList GetComponentWithCascadingTypeParameter() + private ImmutableArray GetComponentWithCascadingTypeParameter() { var input = """ @using System.Collections.Generic @@ -1833,11 +1834,11 @@ @attribute [CascadingTypeParameter(nameof(TItem))] """; var generated = CompileToCSharp("TestGeneric.razor", input, throwOnFailure: true, fileKind: FileKinds.Component); - var tagHelpers = generated.CodeDocument.GetTagHelperContext().TagHelpers; - return tagHelpers; + + return generated.CodeDocument.GetTagHelperContext().TagHelpers.ToImmutableArray(); } - private IReadOnlyList GetComponentWithTwoCascadingTypeParameter() + private ImmutableArray GetComponentWithTwoCascadingTypeParameter() { var input = """ @using System.Collections.Generic @@ -1858,7 +1859,7 @@ @attribute [CascadingTypeParameter(nameof(TItemTwo))] """; var generated = CompileToCSharp("TestGenericTwo.razor", input, throwOnFailure: true, fileKind: FileKinds.Component); - var tagHelpers = generated.CodeDocument.GetTagHelperContext().TagHelpers; - return tagHelpers; + + return generated.CodeDocument.GetTagHelperContext().TagHelpers.ToImmutableArray(); } } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingContentValidationPassTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingContentValidationPassTest.cs index 89236ed46c9..24928d18002 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingContentValidationPassTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingContentValidationPassTest.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; @@ -150,10 +150,10 @@ private static FormattingContext CreateFormattingContext(SourceText source, int return context; } - private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, IReadOnlyList? tagHelpers = null, string? fileKind = default) + private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, ImmutableArray tagHelpers = default, string? fileKind = default) { fileKind ??= FileKinds.Component; - tagHelpers ??= Array.Empty(); + tagHelpers = tagHelpers.NullToEmpty(); var sourceDocument = text.GetRazorSourceDocument(path, path); var projectEngine = RazorProjectEngine.Create(builder => builder.SetRootNamespace("Test")); var codeDocument = projectEngine.ProcessDesignTime(sourceDocument, fileKind, Array.Empty(), tagHelpers); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingDiagnosticValidationPassTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingDiagnosticValidationPassTest.cs index 4ebc05ed081..020b53a995c 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingDiagnosticValidationPassTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingDiagnosticValidationPassTest.cs @@ -158,10 +158,10 @@ private static FormattingContext CreateFormattingContext(SourceText source, int return context; } - private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, IReadOnlyList? tagHelpers = null, string? fileKind = default) + private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, ImmutableArray tagHelpers = default, string? fileKind = default) { fileKind ??= FileKinds.Component; - tagHelpers ??= Array.Empty(); + tagHelpers = tagHelpers.NullToEmpty(); var sourceDocument = text.GetRazorSourceDocument(path, path); var projectEngine = RazorProjectEngine.Create(builder => builder.SetRootNamespace("Test")); var codeDocument = projectEngine.ProcessDesignTime(sourceDocument, fileKind, Array.Empty(), tagHelpers); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs index f5d3a2376c9..45b8696ab95 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/FormattingTestBase.cs @@ -65,12 +65,13 @@ protected internal async Task RunFormattingTestAsync( int tabSize = 4, bool insertSpaces = true, string? fileKind = null, - IReadOnlyList? tagHelpers = null, + ImmutableArray tagHelpers = default, bool allowDiagnostics = false, RazorLSPOptions? razorLSPOptions = null) { // Arrange fileKind ??= FileKinds.Component; + tagHelpers = tagHelpers.NullToEmpty(); TestFileMarkupParser.GetSpans(input, out input, out ImmutableArray spans); @@ -233,13 +234,13 @@ private static SourceText ApplyEdits(SourceText source, TextEdit[] edits) return source.WithChanges(changes); } - private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, IReadOnlyList? tagHelpers = null, string? fileKind = default, bool allowDiagnostics = false) + private static (RazorCodeDocument, IDocumentSnapshot) CreateCodeDocumentAndSnapshot(SourceText text, string path, ImmutableArray tagHelpers = default, string? fileKind = default, bool allowDiagnostics = false) { fileKind ??= FileKinds.Component; - tagHelpers ??= Array.Empty(); + tagHelpers = tagHelpers.NullToEmpty(); if (fileKind == FileKinds.Component) { - tagHelpers = tagHelpers.Concat(s_defaultComponents).ToArray(); + tagHelpers = tagHelpers.AddRange(s_defaultComponents); } var sourceDocument = text.GetRazorSourceDocument(path, path); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/HtmlFormattingTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/HtmlFormattingTest.cs index a2f6be2d54a..743b4ea3050 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/HtmlFormattingTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting/HtmlFormattingTest.cs @@ -3,9 +3,10 @@ #nullable disable -using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.Test.Common; using Xunit; using Xunit.Abstractions; @@ -1579,7 +1580,7 @@ await RunFormattingTestAsync( """, tagHelpers: CreateTagHelpers()); - IReadOnlyList CreateTagHelpers() + ImmutableArray CreateTagHelpers() { var select = """ @typeparam TValue @@ -1611,10 +1612,11 @@ @typeparam TValue var selectComponent = CompileToCSharp("Select.razor", select, throwOnFailure: true, fileKind: FileKinds.Component); var selectItemComponent = CompileToCSharp("SelectItem.razor", selectItem, throwOnFailure: true, fileKind: FileKinds.Component); - var tagHelpers = new List(); + using var _ = ArrayBuilderPool.GetPooledObject(out var tagHelpers); tagHelpers.AddRange(selectComponent.CodeDocument.GetTagHelperContext().TagHelpers); tagHelpers.AddRange(selectItemComponent.CodeDocument.GetTagHelperContext().TagHelpers); - return tagHelpers.AsReadOnly(); + + return tagHelpers.ToImmutable(); } } @@ -1890,7 +1892,7 @@ await RunFormattingTestAsync( """); } - private IReadOnlyList GetComponents() + private ImmutableArray GetComponents() { AdditionalSyntaxTrees.Add(Parse(""" using Microsoft.AspNetCore.Components; @@ -1929,7 +1931,7 @@ public class Component1 : ComponentBase """)); var generated = CompileToCSharp("Test.razor", string.Empty, throwOnFailure: false, fileKind: FileKinds.Component); - var tagHelpers = generated.CodeDocument.GetTagHelperContext().TagHelpers; - return tagHelpers; + + return generated.CodeDocument.GetTagHelperContext().TagHelpers.ToImmutableArray(); } } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs index 17ba8cf7e83..05b931b39fa 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/OpenDocumentGeneratorTest.cs @@ -4,6 +4,7 @@ #nullable disable using System; +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; @@ -132,7 +133,8 @@ await Dispatcher.RunOnDispatcherThreadAsync(() => queue.Initialize(projectManager); // Act - projectManager.ProjectWorkspaceStateChanged(_hostProject1.FilePath, new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp8)); + projectManager.ProjectWorkspaceStateChanged(_hostProject1.FilePath, + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp8)); }, DisposalToken); // Assert @@ -158,7 +160,8 @@ await Dispatcher.RunOnDispatcherThreadAsync(() => queue.Initialize(projectManager); // Act - projectManager.ProjectWorkspaceStateChanged(_hostProject1.FilePath, new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp8)); + projectManager.ProjectWorkspaceStateChanged(_hostProject1.FilePath, + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp8)); }, DisposalToken); // Assert diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs index 1782ce4d81a..f4a8186401d 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Common; @@ -53,7 +54,7 @@ public async Task ProjectConfigurationFileChanged_Removed_NonNormalizedPaths() "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); @@ -119,7 +120,7 @@ public async Task ProjectConfigurationFileChanged_Added_AddAndUpdatesProject() "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); @@ -154,7 +155,7 @@ public async Task ProjectConfigurationFileChanged_Removed_ResetsProject() "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); @@ -203,7 +204,7 @@ public async Task ProjectConfigurationFileChanged_Changed_UpdatesProject() "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(initialProjectRazorJson.FilePath, initialProjectRazorJson.RootNamespace)).Verifiable(); @@ -221,7 +222,7 @@ public async Task ProjectConfigurationFileChanged_Changed_UpdatesProject() "TestConfiguration", Array.Empty()), rootNamespace: "TestRootNamespace2", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp6), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp6), Array.Empty()); projectService.Setup(service => service.UpdateProject( changedProjectRazorJson.FilePath, @@ -264,7 +265,7 @@ public async Task ProjectConfigurationFileChanged_Changed_CantDeserialize_Resets "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(initialProjectRazorJson.FilePath, initialProjectRazorJson.RootNamespace)).Verifiable(); @@ -282,7 +283,7 @@ public async Task ProjectConfigurationFileChanged_Changed_CantDeserialize_Resets "TestConfiguration", Array.Empty()), rootNamespace: "TestRootNamespace2", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp6), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp6), Array.Empty()); // This is the request that happens when the server is reset @@ -347,7 +348,7 @@ public async Task ProjectConfigurationFileChanged_RemoveThenAdd_OnlyAdds() "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", - new ProjectWorkspaceState(Array.Empty(), LanguageVersion.CSharp5), + new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), Array.Empty()); var filePath = "path/to/project.csproj"; diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs index 6d78c7b5363..b2f5a45d207 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Refactoring/RenameEndpointTest.cs @@ -17,6 +17,7 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Extensions; using Microsoft.AspNetCore.Razor.LanguageServer.Protocol; using Microsoft.AspNetCore.Razor.LanguageServer.Test; +using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.AspNetCore.Razor.Test.Common.Mef; @@ -532,7 +533,7 @@ private static TestRazorProjectItem CreateProjectItem(string text, string filePa }; } - private static VersionedDocumentContext CreateRazorDocumentContext(RazorProjectEngine projectEngine, TestRazorProjectItem item, string rootNamespaceName, IReadOnlyList tagHelpers) + private static VersionedDocumentContext CreateRazorDocumentContext(RazorProjectEngine projectEngine, TestRazorProjectItem item, string rootNamespaceName, ImmutableArray tagHelpers) { var codeDocument = projectEngine.ProcessDesignTime(item); @@ -559,14 +560,15 @@ private static VersionedDocumentContext CreateRazorDocumentContext(RazorProjectE private RenameEndpoint CreateEndpoint(LanguageServerFeatureOptions languageServerFeatureOptions = null, RazorDocumentMappingService documentMappingService = null, ClientNotifierServiceBase languageServer = null) { - var tagHelperDescriptors = new List(); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("First", "First.Components", "Component1")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test", "Component2")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("Second", "Second.Components", "Component3")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("Second", "Second.Components", "Component4")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test", "Component1337")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test.Components", "Directory1")); - tagHelperDescriptors.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test.Components", "Directory2")); + using var _ = ArrayBuilderPool.GetPooledObject(out var builder); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("First", "First.Components", "Component1")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test", "Component2")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("Second", "Second.Components", "Component3")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("Second", "Second.Components", "Component4")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test", "Component1337")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test.Components", "Directory1")); + builder.AddRange(CreateRazorComponentTagHelperDescriptors("First", "Test.Components", "Directory2")); + var tagHelperDescriptors = builder.ToImmutable(); var item1 = CreateProjectItem("@namespace First.Components\n@using Test\n", "c:/First/Component1.razor"); var item2 = CreateProjectItem("@namespace Test", "c:/First/Component2.razor"); diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs index 045a5e86e8f..f0a8087cb41 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DefaultProjectSnapshotTest.cs @@ -4,6 +4,7 @@ #nullable disable using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -26,11 +27,9 @@ public DefaultProjectSnapshotTest(ITestOutputHelper testOutput) _tagHelperResolver = new TestTagHelperResolver(); _hostProject = new HostProject(TestProjectData.SomeProject.FilePath, FallbackRazorConfiguration.MVC_2_0, TestProjectData.SomeProject.RootNamespace); - _projectWorkspaceState = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build(), - }, - default); + _projectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build()), + csharpLanguageVersion: default); _documents = new HostDocument[] { diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs index 3ab2709be30..55df81f68df 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/DocumentStateTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -32,10 +33,9 @@ public DocumentStateTest(ITestOutputHelper testOutput) _hostProject = new HostProject(TestProjectData.SomeProject.FilePath, FallbackRazorConfiguration.MVC_2_0, TestProjectData.SomeProject.RootNamespace); _hostProjectWithConfigurationChange = new HostProject(TestProjectData.SomeProject.FilePath, FallbackRazorConfiguration.MVC_1_0, TestProjectData.SomeProject.RootNamespace); - _projectWorkspaceState = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build(), - }, default); + _projectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build()), + csharpLanguageVersion: default); _hostDocument = TestProjectData.SomeProjectFile1; diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs index 1d488968934..c19d2213184 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateGeneratedOutputTest.cs @@ -3,8 +3,8 @@ #nullable disable -using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -22,8 +22,7 @@ public class ProjectStateGeneratedOutputTest : WorkspaceTestBase private readonly HostProject _hostProject; private readonly HostProject _hostProjectWithConfigurationChange; private readonly TestTagHelperResolver _tagHelperResolver; - private readonly List _someTagHelpers; - private readonly Func> _textLoader; + private readonly ImmutableArray _someTagHelpers; private readonly SourceText _text; public ProjectStateGeneratedOutputTest(ITestOutputHelper testOutput) @@ -34,15 +33,12 @@ public ProjectStateGeneratedOutputTest(ITestOutputHelper testOutput) _tagHelperResolver = new TestTagHelperResolver(); - _someTagHelpers = new List - { - TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build() - }; + _someTagHelpers = ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build()); _hostDocument = TestProjectData.SomeProjectFile1; _text = SourceText.From("Hello, world!"); - _textLoader = () => Task.FromResult(TextAndVersion.Create(_text, VersionStamp.Create())); } protected override void ConfigureWorkspaceServices(List services) @@ -169,7 +165,7 @@ public async Task ProjectWorkspaceStateChange_CachesOutput_EvenWhenNewerProjectW .WithProjectWorkspaceState(ProjectWorkspaceState.Default); var (originalOutput, originalInputVersion) = await GetOutputAsync(original, _hostDocument); - var changed = new ProjectWorkspaceState(Array.Empty(), default); + var changed = new ProjectWorkspaceState(ImmutableArray.Empty, csharpLanguageVersion: default); // Act var state = original.WithProjectWorkspaceState(changed); diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs index 5819b68bf1f..ef041159938 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/ProjectSystem/ProjectStateTest.cs @@ -25,7 +25,7 @@ public class ProjectStateTest : WorkspaceTestBase private readonly HostProject _hostProjectWithConfigurationChange; private readonly ProjectWorkspaceState _projectWorkspaceState; private TestTagHelperResolver _tagHelperResolver; - private readonly List _someTagHelpers; + private readonly ImmutableArray _someTagHelpers; private readonly Func> _textLoader; private readonly SourceText _text; @@ -34,15 +34,13 @@ public ProjectStateTest(ITestOutputHelper testOutput) { _hostProject = new HostProject(TestProjectData.SomeProject.FilePath, FallbackRazorConfiguration.MVC_2_0, TestProjectData.SomeProject.RootNamespace); _hostProjectWithConfigurationChange = new HostProject(TestProjectData.SomeProject.FilePath, FallbackRazorConfiguration.MVC_1_0, TestProjectData.SomeProject.RootNamespace); - _projectWorkspaceState = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build(), - }, default); + _projectWorkspaceState = new ProjectWorkspaceState( + ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build()), + csharpLanguageVersion: default); - _someTagHelpers = new List - { - TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build() - }; + _someTagHelpers = ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build()); _documents = new HostDocument[] { @@ -252,7 +250,13 @@ public void ProjectState_AddHostDocument_RetainsComputedState() var actualProjectWorkspaceStateVersion = state.ProjectWorkspaceStateVersion; Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.Equal(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.Same(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -334,7 +338,13 @@ public void ProjectState_WithChangedHostDocument_Loader_RetainsComputedState() var actualProjectWorkspaceStateVersion = state.ProjectWorkspaceStateVersion; Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.Equal(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -360,7 +370,13 @@ public void ProjectState_WithChangedHostDocument_Snapshot_RetainsComputedState() var actualProjectWorkspaceStateVersion = state.ProjectWorkspaceStateVersion; Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.Equal(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -499,7 +515,13 @@ public void ProjectState_RemoveHostDocument_RetainsComputedState() var actualProjectWorkspaceStateVersion = state.ProjectWorkspaceStateVersion; Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.Equal(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.Same(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -545,7 +567,13 @@ public void ProjectState_WithHostProject_ConfigurationChange_UpdatesConfiguratio var actualProjectWorkspaceStateVersion = state.ConfigurationVersion; Assert.NotSame(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.NotEqual(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -639,7 +667,7 @@ public void ProjectState_WithHostProject_ResetsImportedDocuments() public void ProjectState_WithProjectWorkspaceState_Removed() { // Arrange - var emptyProjectWorkspaceState = new ProjectWorkspaceState(Array.Empty(), default); + var emptyProjectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Empty, csharpLanguageVersion: default); var original = ProjectState.Create(Workspace.Services, _hostProject, emptyProjectWorkspaceState) .WithAddedHostDocument(_documents[2], DocumentState.EmptyLoader) .WithAddedHostDocument(_documents[1], DocumentState.EmptyLoader); @@ -660,7 +688,13 @@ public void ProjectState_WithProjectWorkspaceState_Removed() // The configuration didn't change, and the tag helpers didn't actually change Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.NotEqual(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -692,7 +726,13 @@ public void ProjectState_WithProjectWorkspaceState_Added() // The configuration didn't change, and the tag helpers didn't actually change Assert.Same(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.NotEqual(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -725,7 +765,13 @@ public void ProjectState_WithProjectWorkspaceState_Changed() // The C# language version changed, and the tag helpers didn't change Assert.NotSame(original.ProjectEngine, state.ProjectEngine); - Assert.Same(originalTagHelpers, actualTagHelpers); + + Assert.Equal(originalTagHelpers.Length, actualTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], actualTagHelpers[i]); + } + Assert.NotEqual(originalProjectWorkspaceStateVersion, actualProjectWorkspaceStateVersion); Assert.NotSame(original.Documents[_documents[1].FilePath], state.Documents[_documents[1].FilePath]); @@ -744,7 +790,7 @@ public void ProjectState_WithProjectWorkspaceState_Changed_TagHelpersChanged() var originalTagHelpers = original.TagHelpers; var originalProjectWorkspaceStateVersion = original.ProjectWorkspaceStateVersion; - var changed = new ProjectWorkspaceState(Array.Empty(), default); + var changed = new ProjectWorkspaceState(ImmutableArray.Empty, csharpLanguageVersion: default); // Now create some tag helpers _tagHelperResolver.TagHelpers = _someTagHelpers; @@ -806,7 +852,7 @@ public void ProjectState_WithProjectWorkspaceState_CallsWorkspaceProjectChangeOn var original = ProjectState.Create(Workspace.Services, _hostProject, _projectWorkspaceState); original.Documents = documents.ToImmutable(); - var changed = new ProjectWorkspaceState(Array.Empty(), default); + var changed = new ProjectWorkspaceState(ImmutableArray.Empty, csharpLanguageVersion: default); // Act var state = original.WithProjectWorkspaceState(changed); diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs index 0adf0e3864e..d1fd63d0450 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Shared/TestTagHelperResolver.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; @@ -18,7 +17,7 @@ public TestTagHelperResolver() : base(NoOpTelemetryReporter.Instance) { } - public List TagHelpers { get; set; } = new List(); + public ImmutableArray TagHelpers { get; set; } = ImmutableArray.Empty; public override Task GetTagHelpersAsync(Project workspaceProject, IProjectSnapshot projectSnapshot, CancellationToken cancellationToken = default) { diff --git a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs index 506767b556b..ca236f065f5 100644 --- a/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultProjectWorkspaceStateGeneratorTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -19,7 +20,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces; public class DefaultProjectWorkspaceStateGeneratorTest : ProjectSnapshotManagerDispatcherTestBase { - private readonly IReadOnlyList _resolvableTagHelpers; + private readonly ImmutableArray _resolvableTagHelpers; private readonly Workspace _workspace; private readonly Project _workspaceProject; private readonly ProjectSnapshot _projectSnapshot; @@ -28,8 +29,11 @@ public class DefaultProjectWorkspaceStateGeneratorTest : ProjectSnapshotManagerD public DefaultProjectWorkspaceStateGeneratorTest(ITestOutputHelper testOutput) : base(testOutput) { - var tagHelperResolver = new TestTagHelperResolver(); - tagHelperResolver.TagHelpers.Add(TagHelperDescriptorBuilder.Create("ResolvableTagHelper", "TestAssembly").Build()); + var tagHelperResolver = new TestTagHelperResolver() + { + TagHelpers = ImmutableArray.Create(TagHelperDescriptorBuilder.Create("ResolvableTagHelper", "TestAssembly").Build()) + }; + _resolvableTagHelpers = tagHelperResolver.TagHelpers; var workspaceServices = new List() { tagHelperResolver }; var testServices = TestServices.Create(workspaceServices, Enumerable.Empty()); @@ -45,10 +49,9 @@ public DefaultProjectWorkspaceStateGeneratorTest(ITestOutputHelper testOutput) TestProjectData.SomeProject.FilePath)); _workspaceProject = solution.GetProject(projectId); _projectSnapshot = new ProjectSnapshot(ProjectState.Create(_workspace.Services, TestProjectData.SomeProject)); - _projectWorkspaceStateWithTagHelpers = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build(), - }, default); + _projectWorkspaceStateWithTagHelpers = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build()), + csharpLanguageVersion: default); } [UIFact] @@ -146,7 +149,7 @@ public async Task Update_ResolvesTagHelpersAndUpdatesWorkspaceState() // Assert var newProjectSnapshot = projectManager.GetLoadedProject(_projectSnapshot.FilePath); - Assert.Equal(_resolvableTagHelpers, newProjectSnapshot.TagHelpers); + Assert.Equal(_resolvableTagHelpers, newProjectSnapshot.TagHelpers, TagHelperDescriptorComparer.Default); } } } diff --git a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs index ed6ae07f7b4..7c89f5a66f7 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LanguageServerClient.Razor.Test/ProjectRazorJsonPublisherTest.cs @@ -37,10 +37,10 @@ public async Task ProjectManager_Changed_Remove_Change_NoopsOnDelayedPublish() { // Arrange var serializationSuccessful = false; - var tagHelpers = new TagHelperDescriptor[] { + var tagHelpers = ImmutableArray.Create( new DefaultTagHelperDescriptor(FileKinds.Component, "Namespace.FileNameOther", "Assembly", "FileName", "FileName document", "FileName hint", - caseSensitive: false,tagMatchingRules: null, attributeDescriptors: null, allowedChildTags: null, metadata: null, diagnostics: null) - }; + caseSensitive: false,tagMatchingRules: null, attributeDescriptors: null, allowedChildTags: null, metadata: null, diagnostics: null)); + var initialProjectSnapshot = CreateProjectSnapshot(@"C:\path\to\project.csproj", new ProjectWorkspaceState(tagHelpers, CodeAnalysis.CSharp.LanguageVersion.Preview)); var expectedProjectSnapshot = CreateProjectSnapshot(@"C:\path\to\project.csproj", new ProjectWorkspaceState(ImmutableArray.Empty, CodeAnalysis.CSharp.LanguageVersion.Preview)); var expectedConfigurationFilePath = @"C:\path\to\obj\bin\Debug\project.razor.json"; @@ -336,10 +336,10 @@ public async Task EnqueuePublish_OnProjectBeforeTagHelperProcessed_DoesNotPublis // Arrange var serializationSuccessful = false; var firstSnapshot = CreateProjectSnapshot(@"C:\path\to\project.csproj"); - var tagHelpers = new TagHelperDescriptor[] { + var tagHelpers = ImmutableArray.Create( new DefaultTagHelperDescriptor(FileKinds.Component, "Namespace.FileNameOther", "Assembly", "FileName", "FileName document", "FileName hint", - caseSensitive: false,tagMatchingRules: null, attributeDescriptors: null, allowedChildTags: null, metadata: null, diagnostics: null) - }; + caseSensitive: false, tagMatchingRules: null, attributeDescriptors: null, allowedChildTags: null, metadata: null, diagnostics: null)); + var secondSnapshot = CreateProjectSnapshot(@"C:\path\to\project.csproj", new ProjectWorkspaceState(tagHelpers, CodeAnalysis.CSharp.LanguageVersion.CSharp8), new string[]{ "FileName.razor" }); @@ -434,7 +434,7 @@ public async Task ProjectAdded_PublishesToCorrectFilePathAsync() var projectFilePath = @"C:\path\to\project.csproj"; var hostProject = new HostProject(projectFilePath, RazorConfiguration.Default, "TestRootNamespace"); _projectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); - var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty(), CodeAnalysis.CSharp.LanguageVersion.Default); + var projectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Empty, CodeAnalysis.CSharp.LanguageVersion.Default); // Act await RunOnDispatcherThreadAsync(() => @@ -518,7 +518,7 @@ public async Task ProjectAdded_DoesNotFireWhenNotReadyAsync() var projectFilePath = @"C:\path\to\project.csproj"; var hostProject = new HostProject(projectFilePath, RazorConfiguration.Default, "TestRootNamespace"); _projectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); - var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty(), CodeAnalysis.CSharp.LanguageVersion.Default); + var projectWorkspaceState = new ProjectWorkspaceState(ImmutableArray.Empty, CodeAnalysis.CSharp.LanguageVersion.Default); // Act await RunOnDispatcherThreadAsync(() => diff --git a/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs b/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs index 6719995da53..02cd5181e1d 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -31,10 +32,8 @@ public class DefaultProjectSnapshotManagerTest : ProjectSnapshotManagerDispatche public DefaultProjectSnapshotManagerTest(ITestOutputHelper testOutput) : base(testOutput) { - var someTagHelpers = new List - { - TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build() - }; + var someTagHelpers = ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("Test1", "TestAssembly").Build()); _tagHelperResolver = new TestTagHelperResolver() { @@ -238,7 +237,12 @@ public void DocumentAdded_CachesTagHelpers() // Assert var newTagHelpers = _projectManager.GetSnapshot(_hostProject).TagHelpers; - Assert.Same(originalTagHelpers, newTagHelpers); + + Assert.Equal(originalTagHelpers.Length, newTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], newTagHelpers[i]); + } } [UIFact] @@ -330,7 +334,12 @@ public void DocumentRemoved_CachesTagHelpers() // Assert var newTagHelpers = _projectManager.GetSnapshot(_hostProject).TagHelpers; - Assert.Same(originalTagHelpers, newTagHelpers); + + Assert.Equal(originalTagHelpers.Length, newTagHelpers.Length); + for (var i = 0; i < originalTagHelpers.Length; i++) + { + Assert.Same(originalTagHelpers[i], newTagHelpers[i]); + } } [UIFact] diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs index fea93c60aa3..823a1fcd5ae 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Guest/ProjectSnapshotSynchronizationServiceTest.cs @@ -4,6 +4,7 @@ #nullable disable using System; +using System.Collections.Immutable; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -31,11 +32,9 @@ public ProjectSnapshotSynchronizationServiceTest(ITestOutputHelper testOutput) _projectSnapshotManager = new TestProjectSnapshotManager(Workspace); - _projectWorkspaceStateWithTagHelpers = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build() - }, - default); + _projectWorkspaceStateWithTagHelpers = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build()), + csharpLanguageVersion: default); } [Fact] @@ -63,7 +62,12 @@ public async Task InitializeAsync_RetrievesHostProjectManagerStateAndInitializes var project = Assert.Single(_projectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(RazorConfiguration.Default, project.Configuration); - Assert.Same(_projectWorkspaceStateWithTagHelpers.TagHelpers, project.TagHelpers); + + Assert.Equal(_projectWorkspaceStateWithTagHelpers.TagHelpers.Length, project.TagHelpers.Length); + for (var i = 0; i < _projectWorkspaceStateWithTagHelpers.TagHelpers.Length; i++) + { + Assert.Same(_projectWorkspaceStateWithTagHelpers.TagHelpers[i], project.TagHelpers[i]); + } } [Fact] @@ -89,7 +93,12 @@ public void UpdateGuestProjectManager_ProjectAdded() var project = Assert.Single(_projectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(RazorConfiguration.Default, project.Configuration); - Assert.Same(_projectWorkspaceStateWithTagHelpers.TagHelpers, project.TagHelpers); + + Assert.Equal(_projectWorkspaceStateWithTagHelpers.TagHelpers.Length, project.TagHelpers.Length); + for (var i = 0; i < _projectWorkspaceStateWithTagHelpers.TagHelpers.Length; i++) + { + Assert.Same(_projectWorkspaceStateWithTagHelpers.TagHelpers[i], project.TagHelpers[i]); + } } [Fact] @@ -184,6 +193,11 @@ public void UpdateGuestProjectManager_ProjectChanged_ProjectWorkspaceStateChange var project = Assert.Single(_projectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(RazorConfiguration.Default, project.Configuration); - Assert.Same(newProjectWorkspaceState.TagHelpers, project.TagHelpers); + + Assert.Equal(_projectWorkspaceStateWithTagHelpers.TagHelpers.Length, project.TagHelpers.Length); + for (var i = 0; i < _projectWorkspaceStateWithTagHelpers.TagHelpers.Length; i++) + { + Assert.Same(_projectWorkspaceStateWithTagHelpers.TagHelpers[i], project.TagHelpers[i]); + } } } diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs index 3d91afbaafd..9d92e04a035 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/Host/DefaultProjectSnapshotManagerProxyTest.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -29,21 +30,20 @@ public DefaultProjectSnapshotManagerProxyTest(ITestOutputHelper testOutput) _workspace = TestWorkspace.Create(); AddDisposable(_workspace); - var projectWorkspaceState1 = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("test1", "TestAssembly1").Build(), - }, - default); + var projectWorkspaceState1 = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("test1", "TestAssembly1").Build()), + csharpLanguageVersion: default); + _projectSnapshot1 = new ProjectSnapshot( ProjectState.Create( _workspace.Services, new HostProject("/host/path/to/project1.csproj", RazorConfiguration.Default, "project1"), projectWorkspaceState1)); - var projectWorkspaceState2 = new ProjectWorkspaceState(new[] - { - TagHelperDescriptorBuilder.Create("test2", "TestAssembly2").Build(), - }, - default); + + var projectWorkspaceState2 = new ProjectWorkspaceState(ImmutableArray.Create( + TagHelperDescriptorBuilder.Create("test2", "TestAssembly2").Build()), + csharpLanguageVersion: default); + _projectSnapshot2 = new ProjectSnapshot( ProjectState.Create( _workspace.Services, @@ -71,12 +71,12 @@ public async Task CalculateUpdatedStateAsync_ReturnsStateForAllProjects() handle => { Assert.Equal("vsls:/path/to/project1.csproj", handle.FilePath.ToString()); - Assert.Equal(_projectSnapshot1.TagHelpers, handle.ProjectWorkspaceState.TagHelpers); + Assert.Equal(_projectSnapshot1.TagHelpers, handle.ProjectWorkspaceState.TagHelpers, TagHelperDescriptorComparer.Default); }, handle => { Assert.Equal("vsls:/path/to/project2.csproj", handle.FilePath.ToString()); - Assert.Equal(_projectSnapshot2.TagHelpers, handle.ProjectWorkspaceState.TagHelpers); + Assert.Equal(_projectSnapshot2.TagHelpers, handle.ProjectWorkspaceState.TagHelpers, TagHelperDescriptorComparer.Default); }); } @@ -168,12 +168,12 @@ public async Task GetStateAsync_ReturnsProjectState() handle => { Assert.Equal("vsls:/path/to/project1.csproj", handle.FilePath.ToString()); - Assert.Equal(_projectSnapshot1.TagHelpers, handle.ProjectWorkspaceState.TagHelpers); + Assert.Equal(_projectSnapshot1.TagHelpers, handle.ProjectWorkspaceState.TagHelpers, TagHelperDescriptorComparer.Default); }, handle => { Assert.Equal("vsls:/path/to/project2.csproj", handle.FilePath.ToString()); - Assert.Equal(_projectSnapshot2.TagHelpers, handle.ProjectWorkspaceState.TagHelpers); + Assert.Equal(_projectSnapshot2.TagHelpers, handle.ProjectWorkspaceState.TagHelpers, TagHelperDescriptorComparer.Default); }); } diff --git a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs index fcb1e12ad14..e102767b135 100644 --- a/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.VisualStudio.LiveShare.Razor.Test/SerializationTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; @@ -23,11 +24,9 @@ public SerializationTest(ITestOutputHelper testOutput) public void ProjectSnapshotHandleProxy_RoundTripsProperly() { // Arrange - var tagHelpers = new[] - { + var tagHelpers = ImmutableArray.Create( TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly").Build(), - TagHelperDescriptorBuilder.Create("TestTagHelper2", "TestAssembly2").Build(), - }; + TagHelperDescriptorBuilder.Create("TestTagHelper2", "TestAssembly2").Build()); var projectWorkspaceState = new ProjectWorkspaceState(tagHelpers, default); var expectedConfiguration = RazorConfiguration.Default; From 8795985135591d122daa2f8f0308ee9219cab4af Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Wed, 24 May 2023 14:23:24 -0700 Subject: [PATCH 14/15] Fix logic error in JsonDataWriter --- .../Serialization/JsonDataWriter.cs | 4 ++-- .../Serialization/ObjectWriters.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs index 13934f8f19c..6e886e2586c 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/JsonDataWriter.cs @@ -54,7 +54,7 @@ public void Write(string propertyName, bool value) public void WriteIfNotTrue(string propertyName, bool value) { - if (value) + if (!value) { Write(propertyName, value); } @@ -62,7 +62,7 @@ public void WriteIfNotTrue(string propertyName, bool value) public void WriteIfNotFalse(string propertyName, bool value) { - if (!value) + if (value) { Write(propertyName, value); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs index ded76c224e2..84f117766b1 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectWriters.cs @@ -170,8 +170,8 @@ static void WriteBoundAttribute(JsonDataWriter writer, BoundAttributeDescriptor writer.Write(nameof(value.Kind), value.Kind); writer.Write(nameof(value.Name), value.Name); writer.Write(nameof(value.TypeName), value.TypeName); - writer.WriteIfNotTrue(nameof(value.IsEnum), value.IsEnum); - writer.WriteIfNotTrue(nameof(value.IsEditorRequired), value.IsEditorRequired); + writer.WriteIfNotFalse(nameof(value.IsEnum), value.IsEnum); + writer.WriteIfNotFalse(nameof(value.IsEditorRequired), value.IsEditorRequired); writer.WriteIfNotNull(nameof(value.IndexerNamePrefix), value.IndexerNamePrefix); writer.WriteIfNotNull(nameof(value.IndexerTypeName), value.IndexerTypeName); WriteDocumentationObject(writer, nameof(value.Documentation), value.DocumentationObject); @@ -187,7 +187,7 @@ static void WriteBoundAttributeParameter(JsonDataWriter writer, BoundAttributePa { writer.Write(nameof(value.Name), value.Name); writer.Write(nameof(value.TypeName), value.TypeName); - writer.WriteIfNotTrue(nameof(value.IsEnum), value.IsEnum); + writer.WriteIfNotFalse(nameof(value.IsEnum), value.IsEnum); WriteDocumentationObject(writer, nameof(value.Documentation), value.DocumentationObject); writer.WriteArrayIfNotNullOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); writer.WriteObject(nameof(value.Metadata), value.Metadata, WriteMetadata); From 855b86c8f5300da5bbd04ae4960f203e00ebb9c8 Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Thu, 25 May 2023 08:21:11 -0700 Subject: [PATCH 15/15] Use ImmutableArray in ProjectRazorJson --- .../RazorProjectJsonSerializer.cs | 12 +++++++----- .../ProjectConfigurationStateSynchronizer.cs | 2 +- .../ProjectSystem/ProjectRazorJson.cs | 8 ++++---- .../ObjectReaders.ProjectRazorJsonData.cs | 7 +++---- .../IProjectSnapshotExtensions.cs | 7 ++++--- .../SerializationTest.cs | 7 +++---- ...jectConfigurationFileChangeEventArgsTest.cs | 10 ++++------ ...rojectConfigurationStateSynchronizerTest.cs | 18 +++++++++--------- .../Properties/AssemblyInfo.cs | 1 + 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs index 11877891904..162b9d91e6a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs @@ -1,9 +1,11 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. +using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.ProjectEngineHost; using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Serialization; @@ -60,7 +62,7 @@ public static async Task SerializeAsync(Project project, string projectRazorJson var documents = GetDocuments(project, projectPath); // Not a razor project - if (documents.Count == 0) + if (documents.Length == 0) { return; } @@ -164,9 +166,9 @@ private static void WriteJsonFile(string publishFilePath, ProjectRazorJson proje File.Move(tempFileInfo.FullName, publishFilePath); } - private static IReadOnlyList GetDocuments(Project project, string projectPath) + private static ImmutableArray GetDocuments(Project project, string projectPath) { - var documents = new List(project.DocumentIds.Count); + using var documents = new PooledArrayBuilder(); var normalizedProjectPath = FilePathNormalizer.NormalizeDirectory(projectPath); @@ -182,7 +184,7 @@ private static IReadOnlyList GetDocuments(Project projec } } - return documents; + return documents.DrainToImmutable(); } private static string GetTargetPath(string documentFilePath, string normalizedProjectPath) @@ -191,7 +193,7 @@ private static string GetTargetPath(string documentFilePath, string normalizedPr if (targetFilePath.StartsWith(normalizedProjectPath, s_stringComparison)) { // Make relative - targetFilePath = documentFilePath.Substring(normalizedProjectPath.Length); + targetFilePath = documentFilePath[normalizedProjectPath.Length..]; } // Representing all of our host documents with a re-normalized target path to workaround GetRelatedDocument limitations. diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs index 338e94054aa..07e029608ed 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs @@ -129,7 +129,7 @@ void UpdateProject(string projectFilePath, ProjectRazorJson? projectRazorJson) } var projectWorkspaceState = projectRazorJson.ProjectWorkspaceState ?? ProjectWorkspaceState.Default; - var documents = projectRazorJson.Documents ?? Array.Empty(); + var documents = projectRazorJson.Documents; _projectService.UpdateProject( projectRazorJson.FilePath, projectRazorJson.Configuration, diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs index 81e6818033d..e10d4497775 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Serialization; @@ -14,7 +14,7 @@ internal sealed class ProjectRazorJson public RazorConfiguration? Configuration { get; } public string? RootNamespace { get; } public ProjectWorkspaceState? ProjectWorkspaceState { get; } - public IReadOnlyList Documents { get; } + public ImmutableArray Documents { get; } public ProjectRazorJson( string serializedFilePath, @@ -22,13 +22,13 @@ public ProjectRazorJson( RazorConfiguration? configuration, string? rootNamespace, ProjectWorkspaceState? projectWorkspaceState, - IReadOnlyList documents) + ImmutableArray documents) { SerializedFilePath = serializedFilePath; FilePath = filePath; Configuration = configuration; RootNamespace = rootNamespace; ProjectWorkspaceState = projectWorkspaceState; - Documents = documents; + Documents = documents.NullToEmpty(); } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs index 13d1490adf6..fb3d82a862f 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Serialization/ObjectReaders.ProjectRazorJsonData.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -15,7 +15,7 @@ private record struct ProjectRazorJsonData( RazorConfiguration? Configuration, string? RootNamespace, ProjectWorkspaceState? ProjectWorkspaceState, - DocumentSnapshotHandle[] Documents, + ImmutableArray Documents, string? SerializationFormat) { public static readonly PropertyMap PropertyMap = new( @@ -43,8 +43,7 @@ private static void ReadProjectWorkspaceState(JsonDataReader reader, ref Project => data.ProjectWorkspaceState = reader.ReadObject(ReadProjectWorkspaceStateFromProperties); private static void ReadDocuments(JsonDataReader reader, ref ProjectRazorJsonData data) - => data.Documents = reader.ReadArray(static r => r.ReadNonNullObject(ReadDocumentSnapshotHandleFromProperties)) - ?? Array.Empty(); + => data.Documents = reader.ReadImmutableArray(static r => r.ReadNonNullObject(ReadDocumentSnapshotHandleFromProperties)); private static void ReadSerializationFormat(JsonDataReader reader, ref ProjectRazorJsonData data) => data.SerializationFormat = reader.ReadString(); diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs index 1ceb40f7f35..9b9dc8eb53a 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotExtensions.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System.Collections.Generic; +using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Serialization; using Microsoft.CodeAnalysis.Razor.ProjectSystem; @@ -12,7 +12,8 @@ internal static class IProjectSnapshotExtensions { public static ProjectRazorJson ToProjectRazorJson(this IProjectSnapshot project, string serializedFilePath) { - var documents = new List(); + using var documents = new PooledArrayBuilder(); + foreach (var documentFilePath in project.DocumentFilePaths) { if (project.GetDocument(documentFilePath) is { } document) @@ -29,6 +30,6 @@ public static ProjectRazorJson ToProjectRazorJson(this IProjectSnapshot project, configuration: project.Configuration, rootNamespace: project.RootNamespace, projectWorkspaceState: project.ProjectWorkspaceState, - documents: documents); + documents: documents.DrainToImmutable()); } } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs index 99c3b8c7161..0d4e3e61811 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Common.Test/SerializationTest.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; using System.Collections.Immutable; using System.Linq; using Microsoft.AspNetCore.Razor.Language; @@ -46,7 +45,7 @@ public void ProjectRazorJson_InvalidSerializationFormat_SerializesToNull() Configuration, rootNamespace: "TestProject", ProjectWorkspaceState, - Array.Empty()); + ImmutableArray.Empty); var serializedHandle = JsonConvert.SerializeObject(projectRazorJson, ProjectRazorJsonJsonConverter.Instance); Assert.NotNull(serializedHandle); @@ -73,7 +72,7 @@ public void ProjectRazorJson_MissingSerializationFormat_SerializesToNull() Configuration, rootNamespace: "TestProject", ProjectWorkspaceState, - Array.Empty()); + ImmutableArray.Empty); var serializedHandle = JsonConvert.SerializeObject(projectRazorJson, ProjectRazorJsonJsonConverter.Instance); Assert.NotNull(serializedHandle); @@ -103,7 +102,7 @@ public void ProjectRazorJson_CanRoundTrip() Configuration, rootNamespace: "TestProject", ProjectWorkspaceState, - new[] { legacyDocument, componentDocument }); + ImmutableArray.Create(legacyDocument, componentDocument)); var serializedHandle = JsonConvert.SerializeObject(projectRazorJson, ProjectRazorJsonJsonConverter.Instance); Assert.NotNull(serializedHandle); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs index a7d00cd4d3d..80368773205 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationFileChangeEventArgsTest.cs @@ -1,9 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -#nullable disable - -using System; +using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.LanguageServer.Common; using Microsoft.AspNetCore.Razor.LanguageServer.Serialization; using Microsoft.AspNetCore.Razor.ProjectSystem; @@ -34,7 +32,7 @@ public void TryDeserialize_RemovedKind_ReturnsFalse() configuration: null, rootNamespace: null, projectWorkspaceState: null, - documents: Array.Empty())); + documents: ImmutableArray.Empty)); var args = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Removed, jsonFileDeserializer.Object); // Act @@ -57,7 +55,7 @@ public void TryDeserialize_DifferingSerializationPaths_ReturnsFalse() configuration: null, rootNamespace: null, projectWorkspaceState: null, - documents: Array.Empty()); + documents: ImmutableArray.Empty); jsonFileDeserializer.Setup(deserializer => deserializer.Deserialize(It.IsAny())) .Returns(projectRazorJson); var args = new ProjectConfigurationFileChangeEventArgs("/path/to/DIFFERENT/obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer.Object); @@ -81,7 +79,7 @@ public void TryDeserialize_MemoizesResults() configuration: null, rootNamespace: null, projectWorkspaceState: null, - documents: Array.Empty()); + documents: ImmutableArray.Empty); jsonFileDeserializer.Setup(deserializer => deserializer.Deserialize(It.IsAny())) .Returns(projectRazorJson); var args = new ProjectConfigurationFileChangeEventArgs("/path/to/obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer.Object); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs index f4a8186401d..131c2205907 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/ProjectConfigurationStateSynchronizerTest.cs @@ -55,7 +55,7 @@ public async Task ProjectConfigurationFileChanged_Removed_NonNormalizedPaths() RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); projectService.Setup(service => service.UpdateProject( @@ -69,7 +69,7 @@ public async Task ProjectConfigurationFileChanged_Removed_NonNormalizedPaths() null, null, ProjectWorkspaceState.Default, - Array.Empty())).Verifiable(); + ImmutableArray.Empty)).Verifiable(); var synchronizer = GetSynchronizer(projectService.Object); var jsonFileDeserializer = CreateJsonFileDeserializer(projectRazorJson); var addArgs = new ProjectConfigurationFileChangeEventArgs("/path/to\\obj/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer); @@ -121,7 +121,7 @@ public async Task ProjectConfigurationFileChanged_Added_AddAndUpdatesProject() RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); projectService.Setup(service => service.UpdateProject( @@ -156,7 +156,7 @@ public async Task ProjectConfigurationFileChanged_Removed_ResetsProject() RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(projectRazorJson.FilePath, projectRazorJson.RootNamespace)).Verifiable(); projectService.Setup(service => service.UpdateProject( @@ -205,7 +205,7 @@ public async Task ProjectConfigurationFileChanged_Changed_UpdatesProject() RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(initialProjectRazorJson.FilePath, initialProjectRazorJson.RootNamespace)).Verifiable(); projectService.Setup(service => service.UpdateProject( @@ -223,7 +223,7 @@ public async Task ProjectConfigurationFileChanged_Changed_UpdatesProject() Array.Empty()), rootNamespace: "TestRootNamespace2", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp6), - Array.Empty()); + ImmutableArray.Empty); projectService.Setup(service => service.UpdateProject( changedProjectRazorJson.FilePath, changedProjectRazorJson.Configuration, @@ -266,7 +266,7 @@ public async Task ProjectConfigurationFileChanged_Changed_CantDeserialize_Resets RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var projectService = new Mock(MockBehavior.Strict); projectService.Setup(service => service.AddProject(initialProjectRazorJson.FilePath, initialProjectRazorJson.RootNamespace)).Verifiable(); projectService.Setup(service => service.UpdateProject( @@ -284,7 +284,7 @@ public async Task ProjectConfigurationFileChanged_Changed_CantDeserialize_Resets Array.Empty()), rootNamespace: "TestRootNamespace2", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp6), - Array.Empty()); + ImmutableArray.Empty); // This is the request that happens when the server is reset projectService.Setup(service => service.UpdateProject( @@ -349,7 +349,7 @@ public async Task ProjectConfigurationFileChanged_RemoveThenAdd_OnlyAdds() RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(ImmutableArray.Empty, LanguageVersion.CSharp5), - Array.Empty()); + ImmutableArray.Empty); var filePath = "path/to/project.csproj"; var projectService = new Mock(MockBehavior.Strict); diff --git a/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/Properties/AssemblyInfo.cs b/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/Properties/AssemblyInfo.cs index 2872d4065fc..cab1a3012a6 100644 --- a/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/Properties/AssemblyInfo.cs +++ b/src/Shared/Microsoft.AspNetCore.Razor.Utilities.Shared/Properties/AssemblyInfo.cs @@ -16,6 +16,7 @@ [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Test.Common.Compiler, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] // Razor tooling assemblies +[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.LanguageServer, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.LanguageServer.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.LanguageServer.Protocol, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]