Skip to content

Commit

Permalink
use HashSet instead
Browse files Browse the repository at this point in the history
  • Loading branch information
omsmith committed Aug 12, 2024
1 parent ff63a9f commit 47f49cb
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
20 changes: 18 additions & 2 deletions src/D2L.CodeStyle.Analyzers/Helpers/ExemptSymbolsBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ internal sealed class ExemptSymbolsBuilder {
private readonly AnalyzerOptions m_analyzerOptions;
private readonly CancellationToken m_cancellationToken;

private readonly ImmutableHashSet<ISymbol>.Builder m_exemptions = ImmutableHashSet.CreateBuilder<ISymbol>( SymbolEqualityComparer.Default );
private readonly HashSet<ISymbol> m_exemptions = new( SymbolEqualityComparer.Default );
private bool m_built = false;

[System.Diagnostics.CodeAnalysis.SuppressMessage(
"MicrosoftCodeAnalysisPerformance",
Expand All @@ -26,7 +27,12 @@ CompilationStartAnalysisContext context
m_cancellationToken = context.CancellationToken;
}

public ImmutableHashSet<ISymbol> Build() => m_exemptions.ToImmutable();
public HashSet<ISymbol> Build() {
ThrowIfBuilt();

m_built = true;
return m_exemptions;
}

/// <summary>
/// Loads exemptions from AdditionalFiles matching "<paramref name="fileNameBase"/>.txt" and "<paramref name="fileNameBase"/>.*.txt".
Expand All @@ -35,6 +41,8 @@ CompilationStartAnalysisContext context
public ExemptSymbolsBuilder AddFromAdditionalFiles(
string fileNameBase
) {
ThrowIfBuilt();

fileNameBase += ".";

foreach( AdditionalText file in m_analyzerOptions.AdditionalFiles ) {
Expand Down Expand Up @@ -73,6 +81,8 @@ string fileNameBase
}

public ExemptSymbolsBuilder AddFromDocumentationCommentId( string id ) {
ThrowIfBuilt();

ImmutableArray<ISymbol> symbols = DocumentationCommentId.GetSymbolsForDeclarationId( id, m_compilation );
foreach( var symbol in symbols ) {
m_exemptions.Add( symbol );
Expand All @@ -81,4 +91,10 @@ public ExemptSymbolsBuilder AddFromDocumentationCommentId( string id ) {
return this;
}

private void ThrowIfBuilt() {
if( m_built ) {
throw new InvalidOperationException( "Builder instance has already been used" );
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ private static void OnCompilationStart( CompilationStartAnalysisContext context
return;
}

ImmutableHashSet<ISymbol> exemptions = new ExemptSymbolsBuilder( context )
HashSet<ISymbol> exemptions = new ExemptSymbolsBuilder( context )
.AddFromAdditionalFiles( "D2L.CodeStyle.RequireNamedArguments.Exemptions" )

// HashCode.Combine takes a series of args named value1..valueN which are not useful to name
Expand Down Expand Up @@ -86,7 +86,7 @@ private static void AnalyzeInvocation(
OperationAnalysisContext ctx,
INamedTypeSymbol requireNamedArgumentsSymbol,
INamedTypeSymbol? lambdaExpresssionSymbol,
ImmutableHashSet<ISymbol> exemptions
HashSet<ISymbol> exemptions
) {
(IMethodSymbol targetMethod, ImmutableArray<IArgumentOperation> args) = ctx.Operation switch {
IInvocationOperation op => (op.TargetMethod, op.Arguments),
Expand Down

0 comments on commit 47f49cb

Please sign in to comment.