From e0a7fa8dde2720941f115c605c0f98f5e6dcaedc Mon Sep 17 00:00:00 2001 From: nenoNaninu Date: Wed, 8 Feb 2023 01:48:59 +0900 Subject: [PATCH] update code to use Roslyn v4.3.1 --- .../CodeAnalysis/SpecialSymbols.cs | 24 +++---- .../SourceGenerator.cs | 70 ++++++++++++------- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/src/TypedSignalR.Client.DevTools.Specification/CodeAnalysis/SpecialSymbols.cs b/src/TypedSignalR.Client.DevTools.Specification/CodeAnalysis/SpecialSymbols.cs index 3c2fd6b..c768677 100644 --- a/src/TypedSignalR.Client.DevTools.Specification/CodeAnalysis/SpecialSymbols.cs +++ b/src/TypedSignalR.Client.DevTools.Specification/CodeAnalysis/SpecialSymbols.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.CodeAnalysis; namespace TypedSignalR.Client.CodeAnalysis; @@ -10,10 +10,10 @@ 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 MapHubMethodSymbols; + public readonly ImmutableArray HubAttributeSymbols; + public readonly ImmutableArray ReceiverAttributeSymbols; + public readonly ImmutableArray AuthorizeAttributeSymbols; + public readonly ImmutableArray MapHubMethodSymbols; public SpecialSymbols( INamedTypeSymbol taskSymbol, @@ -21,19 +21,19 @@ public SpecialSymbols( INamedTypeSymbol cancellationTokenSymbol, INamedTypeSymbol asyncEnumerableSymbol, INamedTypeSymbol channelReaderSymbol, - INamedTypeSymbol hubAttributeSymbol, - INamedTypeSymbol receiverAttributeSymbol, - INamedTypeSymbol authorizeAttributeSymbol, - IReadOnlyList mapHubMethodSymbols) + ImmutableArray hubAttributeSymbols, + ImmutableArray receiverAttributeSymbols, + ImmutableArray authorizeAttributeSymbols, + ImmutableArray 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; } } diff --git a/src/TypedSignalR.Client.DevTools.Specification/SourceGenerator.cs b/src/TypedSignalR.Client.DevTools.Specification/SourceGenerator.cs index 361bbf8..294b48e 100644 --- a/src/TypedSignalR.Client.DevTools.Specification/SourceGenerator.cs +++ b/src/TypedSignalR.Client.DevTools.Specification/SourceGenerator.cs @@ -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; @@ -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.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); + } } } @@ -195,9 +195,9 @@ private static SpecialSymbols GetSpecialSymbols(Compilation compilation) cancellationTokenSymbol!, asyncEnumerableSymbol!, channelReaderSymbol!, - hubAttribute!, - receiverAttribute!, - authorizeAttribute!, + hubAttributes, + receiverAttributes, + authorizeAttributes, mapHubMethodSymbols ); } @@ -251,9 +251,12 @@ private static IReadOnlyList 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); @@ -295,9 +298,12 @@ private static IReadOnlyList 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; + } } } @@ -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(); @@ -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; + } + } } } }