From 0dfa6464160b9e737b8684bf545e38ed1cf21b11 Mon Sep 17 00:00:00 2001 From: laenas Date: Thu, 20 Aug 2020 22:05:19 +0200 Subject: [PATCH 1/2] Correctly handle multiple reference aliases --- src/OmniSharp.MSBuild/ProjectManager.cs | 18 ++++++++++++++++-- .../ExternAlias.App/ExternAlias.App.csproj | 2 +- .../ExternAlias/ExternAlias.App/Program.cs | 2 ++ .../ExternAlias.App2/ExternAlias.App2.csproj | 2 +- .../ExternAlias/ExternAlias.App2/Program.cs | 2 ++ .../ProjectFileInfoTests.cs | 4 ++-- .../WorkspaceInformationTests.cs | 8 ++++++-- 7 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/OmniSharp.MSBuild/ProjectManager.cs b/src/OmniSharp.MSBuild/ProjectManager.cs index 33a0adbe6c..fb2747f6d5 100644 --- a/src/OmniSharp.MSBuild/ProjectManager.cs +++ b/src/OmniSharp.MSBuild/ProjectManager.cs @@ -671,7 +671,14 @@ private void UpdateProjectReferences(Project project, ImmutableArray pro { if (!string.IsNullOrEmpty(projectReferenceAliases)) { - aliases = projectReferenceAliases.Split(';').ToImmutableArray(); + var trimmed = projectReferenceAliases.Split(','); + + for(var i = 0; i < trimmed.Length; i++) + { + trimmed[i] = trimmed[i].Trim(); + } + + aliases = trimmed.ToImmutableArray(); _logger.LogDebug($"Setting aliases: {projectReferencePath}, {projectReferenceAliases} "); } } @@ -740,7 +747,14 @@ private void UpdateReferences(Project project, ImmutableArray projectRef { if (!string.IsNullOrEmpty(aliases)) { - reference = reference.WithAliases(aliases.Split(';')); + var trimmed = aliases.Split(','); + + for(var i = 0; i < trimmed.Length; i++) + { + trimmed[i] = trimmed[i].Trim(); + } + + reference = reference.WithAliases(trimmed); _logger.LogDebug($"setting aliases: {referencePath}, {aliases} "); } } diff --git a/test-assets/test-projects/ExternAlias/ExternAlias.App/ExternAlias.App.csproj b/test-assets/test-projects/ExternAlias/ExternAlias.App/ExternAlias.App.csproj index b451149038..7c0af98682 100644 --- a/test-assets/test-projects/ExternAlias/ExternAlias.App/ExternAlias.App.csproj +++ b/test-assets/test-projects/ExternAlias/ExternAlias.App/ExternAlias.App.csproj @@ -7,7 +7,7 @@ $(ProjectDir)../ExternAlias.Lib/bin/$(Configuration)/netstandard2.0/ExternAlias.Lib.dll - abc + abc,def diff --git a/test-assets/test-projects/ExternAlias/ExternAlias.App/Program.cs b/test-assets/test-projects/ExternAlias/ExternAlias.App/Program.cs index 3364a344bd..c75f57a9c5 100644 --- a/test-assets/test-projects/ExternAlias/ExternAlias.App/Program.cs +++ b/test-assets/test-projects/ExternAlias/ExternAlias.App/Program.cs @@ -1,4 +1,5 @@ extern alias abc; +extern alias def; using System; namespace ExternAlias.App @@ -8,6 +9,7 @@ class Program static void Main(string[] args) { new abc::ExternAlias.Lib.Class1(); + new def::ExternAlias.Lib.Class1(); Console.WriteLine("Hello World!"); } } diff --git a/test-assets/test-projects/ExternAlias/ExternAlias.App2/ExternAlias.App2.csproj b/test-assets/test-projects/ExternAlias/ExternAlias.App2/ExternAlias.App2.csproj index f13ca7f132..c218f13cd8 100644 --- a/test-assets/test-projects/ExternAlias/ExternAlias.App2/ExternAlias.App2.csproj +++ b/test-assets/test-projects/ExternAlias/ExternAlias.App2/ExternAlias.App2.csproj @@ -8,7 +8,7 @@ - abc + abc,def diff --git a/test-assets/test-projects/ExternAlias/ExternAlias.App2/Program.cs b/test-assets/test-projects/ExternAlias/ExternAlias.App2/Program.cs index 3364a344bd..c75f57a9c5 100644 --- a/test-assets/test-projects/ExternAlias/ExternAlias.App2/Program.cs +++ b/test-assets/test-projects/ExternAlias/ExternAlias.App2/Program.cs @@ -1,4 +1,5 @@ extern alias abc; +extern alias def; using System; namespace ExternAlias.App @@ -8,6 +9,7 @@ class Program static void Main(string[] args) { new abc::ExternAlias.Lib.Class1(); + new def::ExternAlias.Lib.Class1(); Console.WriteLine("Hello World!"); } } diff --git a/tests/OmniSharp.MSBuild.Tests/ProjectFileInfoTests.cs b/tests/OmniSharp.MSBuild.Tests/ProjectFileInfoTests.cs index e5c406f17b..d9cd52f13e 100644 --- a/tests/OmniSharp.MSBuild.Tests/ProjectFileInfoTests.cs +++ b/tests/OmniSharp.MSBuild.Tests/ProjectFileInfoTests.cs @@ -159,7 +159,7 @@ public async Task ExternAliasWithReference() var libpath = Path.Combine(testProject.Directory, "ExternAlias.Lib", "bin", "Debug", "netstandard2.0", "ExternAlias.Lib.dll"); Assert.True(projectFileInfo.ReferenceAliases.ContainsKey(libpath)); - Assert.Equal("abc", projectFileInfo.ReferenceAliases[libpath]); + Assert.Equal("abc,def", projectFileInfo.ReferenceAliases[libpath]); } } @@ -179,7 +179,7 @@ public async Task ExternAliasWithProjectReference() var projectReferencePath = Path.Combine(testProject.Directory, "ExternAlias.Lib", "ExternAlias.Lib.csproj"); Assert.True(projectFileInfo.ProjectReferenceAliases.ContainsKey(projectReferencePath)); - Assert.Equal("abc", projectFileInfo.ProjectReferenceAliases[projectReferencePath]); + Assert.Equal("abc,def", projectFileInfo.ProjectReferenceAliases[projectReferencePath]); } } diff --git a/tests/OmniSharp.MSBuild.Tests/WorkspaceInformationTests.cs b/tests/OmniSharp.MSBuild.Tests/WorkspaceInformationTests.cs index fcb4ad746e..f750728511 100644 --- a/tests/OmniSharp.MSBuild.Tests/WorkspaceInformationTests.cs +++ b/tests/OmniSharp.MSBuild.Tests/WorkspaceInformationTests.cs @@ -317,7 +317,9 @@ public async Task TestProjectWithAliasOnProjectReference() .ProjectReferences .Single(x => x.ProjectId == lib.Id); - Assert.Equal("abc", projectReference.Aliases.Single()); + Assert.Collection(projectReference.Aliases, + referenceA => Assert.Equal("abc",referenceA), + referenceB => Assert.Equal("def",referenceB)); } } @@ -337,7 +339,9 @@ public async Task TestProjectWithAliasOnReference() .MetadataReferences .Single(x => x.Display == "ExternAlias.Lib.dll"); - Assert.Equal("abc", reference.Properties.Aliases.Single()); + Assert.Collection(reference.Properties.Aliases, + referenceA => Assert.Equal("abc",referenceA), + referenceB => Assert.Equal("def",referenceB)); } } } From de6eb1cc475974f8e331c0c29d540066d5b26ed7 Mon Sep 17 00:00:00 2001 From: laenas Date: Fri, 21 Aug 2020 19:19:53 +0200 Subject: [PATCH 2/2] Simplify splitting and trimming --- src/OmniSharp.MSBuild/ProjectManager.cs | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/OmniSharp.MSBuild/ProjectManager.cs b/src/OmniSharp.MSBuild/ProjectManager.cs index fb2747f6d5..4dfde97ea3 100644 --- a/src/OmniSharp.MSBuild/ProjectManager.cs +++ b/src/OmniSharp.MSBuild/ProjectManager.cs @@ -670,15 +670,8 @@ private void UpdateProjectReferences(Project project, ImmutableArray pro if (projectFileInfo.ProjectReferenceAliases.TryGetValue(projectReferencePath, out var projectReferenceAliases)) { if (!string.IsNullOrEmpty(projectReferenceAliases)) - { - var trimmed = projectReferenceAliases.Split(','); - - for(var i = 0; i < trimmed.Length; i++) - { - trimmed[i] = trimmed[i].Trim(); - } - - aliases = trimmed.ToImmutableArray(); + { + aliases = ImmutableArray.CreateRange(projectReferenceAliases.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries).Select(a => a.Trim())); _logger.LogDebug($"Setting aliases: {projectReferencePath}, {projectReferenceAliases} "); } } @@ -747,14 +740,7 @@ private void UpdateReferences(Project project, ImmutableArray projectRef { if (!string.IsNullOrEmpty(aliases)) { - var trimmed = aliases.Split(','); - - for(var i = 0; i < trimmed.Length; i++) - { - trimmed[i] = trimmed[i].Trim(); - } - - reference = reference.WithAliases(trimmed); + reference = reference.WithAliases(aliases.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries).Select(a => a.Trim())); _logger.LogDebug($"setting aliases: {referencePath}, {aliases} "); } }