Skip to content

Commit 28cf9aa

Browse files
authored
Add explicit support for assembly aliases (Buildalyzer#294)
1 parent 2248a7a commit 28cf9aa

File tree

12 files changed

+94
-5
lines changed

12 files changed

+94
-5
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
- name: Build and Test
3131
run: dotnet test --logger "trx;LogFileName=test-results.trx"
3232
- name: Upload Test Results
33-
uses: actions/upload-artifact@v2
33+
uses: actions/upload-artifact@v4
3434
if: success() || failure()
3535
with:
3636
name: test-results-${{ matrix.os }}

src/Buildalyzer.Workspaces/AnalyzerResultExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ private static IEnumerable<DocumentInfo> GetAdditionalDocuments(IAnalyzerResult
293293
private static IEnumerable<MetadataReference> GetMetadataReferences(IAnalyzerResult analyzerResult) =>
294294
analyzerResult
295295
.References?.Where(File.Exists)
296-
.Select(x => MetadataReference.CreateFromFile(x))
296+
.Select(x => MetadataReference.CreateFromFile(x, new MetadataReferenceProperties(aliases: analyzerResult.ReferenceAliases.GetValueOrDefault(x))))
297297
?? [];
298298

299299
private static IEnumerable<AnalyzerReference> GetAnalyzerReferences(IAnalyzerResult analyzerResult, Workspace workspace)

src/Buildalyzer/AnalyzerResult.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ public string GetProperty(string name) =>
7171
public string[] References =>
7272
CompilerCommand?.MetadataReferences.ToArray() ?? [];
7373

74+
public ImmutableDictionary<string, ImmutableArray<string>> ReferenceAliases =>
75+
CompilerCommand?.Aliases ?? ImmutableDictionary<string, ImmutableArray<string>>.Empty;
76+
7477
public string[] AnalyzerReferences =>
7578
CompilerCommand?.AnalyzerReferences.Select(r => r.ToString()).ToArray() ?? [];
7679

src/Buildalyzer/Compiler/Compiler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ public static TCommand Enrich<TCommand>(TCommand command, CommandLineArguments a
102102
AnalyzerReferences = arguments.AnalyzerReferences.Select(AsIOPath).ToImmutableArray(),
103103
AnalyzerConfigPaths = arguments.AnalyzerConfigPaths.Select(IOPath.Parse).ToImmutableArray(),
104104
MetadataReferences = arguments.MetadataReferences.Select(m => m.Reference).ToImmutableArray(),
105+
Aliases = arguments.MetadataReferences.Where(m => !m.Properties.Aliases.IsEmpty).ToImmutableDictionary(m => m.Reference, m => m.Properties.Aliases),
105106
PreprocessorSymbolNames = arguments.ParseOptions.PreprocessorSymbolNames.ToImmutableArray(),
106-
107107
SourceFiles = arguments.SourceFiles.Select(AsIOPath).ToImmutableArray(),
108108
AdditionalFiles = arguments.AdditionalFiles.Select(AsIOPath).ToImmutableArray(),
109109
EmbeddedFiles = arguments.EmbeddedFiles.Select(AsIOPath).ToImmutableArray(),
@@ -115,4 +115,4 @@ public static TCommand Enrich<TCommand>(TCommand command, CommandLineArguments a
115115

116116
[Pure]
117117
internal static IOPath AsIOPath(CommandLineSourceFile file) => IOPath.Parse(file.Path);
118-
}
118+
}

src/Buildalyzer/Compiler/CompilerCommand.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public abstract record CompilerCommand
4545
/// <inheritdoc cref="CommandLineArguments.MetadataReferences" />
4646
public ImmutableArray<string> MetadataReferences { get; init; }
4747

48+
/// <summary>
49+
/// The aliases used in the command line arguments.
50+
/// </summary>
51+
public ImmutableDictionary<string, ImmutableArray<string>> Aliases { get; init; }
52+
4853
/// <inheritdoc />
4954
[Pure]
5055
public override string ToString() => Text ?? string.Empty;

src/Buildalyzer/IAnalyzerResult.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public interface IAnalyzerResult
3838

3939
string[] References { get; }
4040

41+
ImmutableDictionary<string, ImmutableArray<string>> ReferenceAliases {get; }
42+
4143
string[] AnalyzerReferences { get; }
4244

4345
string[] SourceFiles { get; }

src/Buildalyzer/Logging/EventProcessor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ private void MessageRaised(object sender, BuildMessageEventArgs e)
172172
}
173173

174174
bool IsRelevant() => string.IsNullOrEmpty(result.Command) || AnalyzerManager.NormalizePath(e.ProjectFile) == _projectFilePath;
175-
176175
}
177176

178177
private void BuildFinished(object sender, BuildFinishedEventArgs e)

tests/Buildalyzer.Tests/Integration/SimpleProjectsFixture.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class SimpleProjectsFixture
4141
@"SdkNet6ImplicitUsings\SdkNet6ImplicitUsings.csproj",
4242
@"SdkNet7Project\SdkNet7Project.csproj",
4343
@"SdkNet8CS12FeaturesProject\SdkNet8CS12FeaturesProject.csproj",
44+
@"SdkNet8Alias\SdkNet8Alias.csproj",
4445
@"SdkNetCore2ProjectImport\SdkNetCore2ProjectImport.csproj",
4546
@"SdkNetCore2ProjectWithReference\SdkNetCore2ProjectWithReference.csproj",
4647
@"SdkNetCore2ProjectWithImportedProps\SdkNetCore2ProjectWithImportedProps.csproj",

tests/Buildalyzer.Workspaces.Tests/ProjectAnalyzerExtensionsFixture.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,25 @@ public async Task SupportsLangVersion12Features()
198198
diagnostics.ShouldBeEmpty();
199199
}
200200

201+
202+
[Test(Description = "Test Reference Alias support")]
203+
204+
public async Task SupportAssemblyAliases()
205+
{
206+
// Given
207+
StringWriter log = new StringWriter();
208+
IProjectAnalyzer analyzer = GetProjectAnalyzer(@"projects\SdkNet8Alias\SdkNet8Alias.csproj", log);
209+
AdhocWorkspace workspace = analyzer.GetWorkspace();
210+
Project project = workspace.CurrentSolution.Projects.Single();
211+
212+
// When
213+
Compilation compilation = await project.GetCompilationAsync();
214+
215+
Diagnostic[] diagnostics = compilation.GetDiagnostics().Where(d => d.Severity == DiagnosticSeverity.Error).ToArray();
216+
217+
diagnostics.ShouldBeEmpty();
218+
}
219+
201220
#if Is_Windows
202221
[Test]
203222
public void HandlesWpfCustomControlLibrary()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
extern alias Alias;
2+
3+
using Alias::Xunit;
4+
5+
namespace SdkNet8Alias
6+
{
7+
public class Class1
8+
{
9+
[Fact]
10+
public void Test1()
11+
{
12+
13+
}
14+
}
15+
}

0 commit comments

Comments
 (0)