Skip to content

Commit

Permalink
update code to use Roslyn v4.3.1
Browse files Browse the repository at this point in the history
  • Loading branch information
nenoNaninu committed Feb 7, 2023
1 parent f7d1414 commit e0a7fa8
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using Microsoft.CodeAnalysis;

namespace TypedSignalR.Client.CodeAnalysis;
Expand All @@ -10,30 +10,30 @@ public sealed class SpecialSymbols
public readonly INamedTypeSymbol CancellationTokenSymbol;
public readonly INamedTypeSymbol AsyncEnumerableSymbol;
public readonly INamedTypeSymbol ChannelReaderSymbol;
public readonly INamedTypeSymbol HubAttributeSymbol;
public readonly INamedTypeSymbol ReceiverAttributeSymbol;
public readonly INamedTypeSymbol AuthorizeAttributeSymbol;
public readonly IReadOnlyList<IMethodSymbol> MapHubMethodSymbols;
public readonly ImmutableArray<INamedTypeSymbol> HubAttributeSymbols;
public readonly ImmutableArray<INamedTypeSymbol> ReceiverAttributeSymbols;
public readonly ImmutableArray<INamedTypeSymbol> AuthorizeAttributeSymbols;
public readonly ImmutableArray<IMethodSymbol> MapHubMethodSymbols;

public SpecialSymbols(
INamedTypeSymbol taskSymbol,
INamedTypeSymbol genericTaskSymbol,
INamedTypeSymbol cancellationTokenSymbol,
INamedTypeSymbol asyncEnumerableSymbol,
INamedTypeSymbol channelReaderSymbol,
INamedTypeSymbol hubAttributeSymbol,
INamedTypeSymbol receiverAttributeSymbol,
INamedTypeSymbol authorizeAttributeSymbol,
IReadOnlyList<IMethodSymbol> mapHubMethodSymbols)
ImmutableArray<INamedTypeSymbol> hubAttributeSymbols,
ImmutableArray<INamedTypeSymbol> receiverAttributeSymbols,
ImmutableArray<INamedTypeSymbol> authorizeAttributeSymbols,
ImmutableArray<IMethodSymbol> mapHubMethodSymbols)
{
TaskSymbol = taskSymbol;
GenericTaskSymbol = genericTaskSymbol;
CancellationTokenSymbol = cancellationTokenSymbol;
AsyncEnumerableSymbol = asyncEnumerableSymbol;
ChannelReaderSymbol = channelReaderSymbol;
HubAttributeSymbol = hubAttributeSymbol;
ReceiverAttributeSymbol = receiverAttributeSymbol;
AuthorizeAttributeSymbol = authorizeAttributeSymbol;
HubAttributeSymbols = hubAttributeSymbols;
ReceiverAttributeSymbols = receiverAttributeSymbols;
AuthorizeAttributeSymbols = authorizeAttributeSymbols;
MapHubMethodSymbols = mapHubMethodSymbols;
}
}
70 changes: 44 additions & 26 deletions src/TypedSignalR.Client.DevTools.Specification/SourceGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
Expand Down Expand Up @@ -167,25 +166,26 @@ private static SpecialSymbols GetSpecialSymbols(Compilation compilation)
var asyncEnumerableSymbol = compilation.GetTypeByMetadataName("System.Collections.Generic.IAsyncEnumerable`1");
var channelReaderSymbol = compilation.GetTypeByMetadataName("System.Threading.Channels.ChannelReader`1");

var hubEndpointRouteBuilderExtensions = compilation.GetTypeByMetadataName("Microsoft.AspNetCore.Builder.HubEndpointRouteBuilderExtensions");
var authorizeAttribute = compilation.GetTypeByMetadataName("Microsoft.AspNetCore.Authorization.AuthorizeAttribute");
var hubAttribute = compilation.GetTypeByMetadataName("TypedSignalR.Client.HubAttribute");
var receiverAttribute = compilation.GetTypeByMetadataName("TypedSignalR.Client.ReceiverAttribute");
var hubEndpointRouteBuilderExtensions = compilation.GetTypesByMetadataName("Microsoft.AspNetCore.Builder.HubEndpointRouteBuilderExtensions");
var authorizeAttributes = compilation.GetTypesByMetadataName("Microsoft.AspNetCore.Authorization.AuthorizeAttribute");
var hubAttributes = compilation.GetTypesByMetadataName("TypedSignalR.Client.HubAttribute");
var receiverAttributes = compilation.GetTypesByMetadataName("TypedSignalR.Client.ReceiverAttribute");

int count = 0;
var mapHubMethodSymbols = new IMethodSymbol[2];
var mapHubMethodSymbols = ImmutableArray<IMethodSymbol>.Empty;

foreach (var memberSymbol in hubEndpointRouteBuilderExtensions!.GetMembers())
foreach (var builderExtensions in hubEndpointRouteBuilderExtensions)
{
if (memberSymbol is not IMethodSymbol methodSymbol)
foreach (var memberSymbol in builderExtensions.GetMembers())
{
continue;
}
if (memberSymbol is not IMethodSymbol methodSymbol)
{
continue;
}

if (methodSymbol.Name is "MapHub" && methodSymbol.MethodKind is MethodKind.Ordinary)
{
mapHubMethodSymbols[count] = methodSymbol;
count++;
if (methodSymbol.Name is "MapHub" && methodSymbol.MethodKind is MethodKind.Ordinary)
{
mapHubMethodSymbols = mapHubMethodSymbols.Add(methodSymbol);
}
}
}

Expand All @@ -195,9 +195,9 @@ private static SpecialSymbols GetSpecialSymbols(Compilation compilation)
cancellationTokenSymbol!,
asyncEnumerableSymbol!,
channelReaderSymbol!,
hubAttribute!,
receiverAttribute!,
authorizeAttribute!,
hubAttributes,
receiverAttributes,
authorizeAttributes,
mapHubMethodSymbols
);
}
Expand Down Expand Up @@ -251,9 +251,12 @@ private static IReadOnlyList<SignalRServiceTypeMetadata> ExtractSignalRServiceTy
{
foreach (var attributeData in interfaceSymbol.GetAttributes())
{
if (!SymbolEqualityComparer.Default.Equals(specialSymbols.HubAttributeSymbol, attributeData.AttributeClass))
foreach (var hubAttributeSymbol in specialSymbols.HubAttributeSymbols)
{
continue;
if (!SymbolEqualityComparer.Default.Equals(hubAttributeSymbol, attributeData.AttributeClass))
{
continue;
}
}

var isValid = TypeValidator.ValidateHubTypeRule(context, interfaceSymbol, specialSymbols, location);
Expand Down Expand Up @@ -295,9 +298,12 @@ private static IReadOnlyList<SignalRServiceTypeMetadata> ExtractSignalRServiceTy

foreach (var attributeData in receiverType.GetAttributes())
{
if (SymbolEqualityComparer.Default.Equals(specialSymbols.ReceiverAttributeSymbol, attributeData.AttributeClass))
foreach (var receiverAttributeSymbol in specialSymbols.ReceiverAttributeSymbols)
{
annotated = true;
if (SymbolEqualityComparer.Default.Equals(receiverAttributeSymbol, attributeData.AttributeClass))
{
annotated = true;
}
}
}

Expand All @@ -323,9 +329,15 @@ private static bool AnalyzeRequiredAuth(
{
var attributes = serviceType.GetAttributes();

if (attributes.Any(x => SymbolEqualityComparer.Default.Equals(x.AttributeClass, specialSymbols.AuthorizeAttributeSymbol)))
foreach (var attribute in attributes)
{
return true;
foreach (var authorizeAttributeSymbol in specialSymbols.AuthorizeAttributeSymbols)
{
if (SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, authorizeAttributeSymbol))
{
return true;
}
}
}

var members = serviceType.GetMembers();
Expand All @@ -336,9 +348,15 @@ private static bool AnalyzeRequiredAuth(
{
var methodAttributes = method.GetAttributes();

if (methodAttributes.Any(x => SymbolEqualityComparer.Default.Equals(x.AttributeClass, specialSymbols.AuthorizeAttributeSymbol)))
foreach (var methodAttribute in methodAttributes)
{
return true;
foreach (var authorizeAttributeSymbol in specialSymbols.AuthorizeAttributeSymbols)
{
if (SymbolEqualityComparer.Default.Equals(methodAttribute.AttributeClass, authorizeAttributeSymbol))
{
return true;
}
}
}
}
}
Expand Down

0 comments on commit e0a7fa8

Please sign in to comment.