add a scanner, but this seems to be a wrong solution. Change open-source head
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
using System.Collections.Immutable;
|
||||
// -----------------------------------------------------------------------------
|
||||
// file="PanelStateIncrementalGenerator.Pipeline"
|
||||
// Project: StgSharp
|
||||
// Copyright (c) Nitload.
|
||||
// SPDX-License-Identifier: MIT
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using System.Collections.Immutable;
|
||||
using System.Threading;
|
||||
|
||||
namespace StgSharp.UserInterface.Generator
|
||||
@@ -12,12 +19,13 @@ namespace StgSharp.UserInterface.Generator
|
||||
SyntaxNode node
|
||||
)
|
||||
{
|
||||
return node is TypeDeclarationSyntax typeDeclaration && HasAttributedMembers(typeDeclaration);
|
||||
return node is TypeDeclarationSyntax typeDeclaration &&
|
||||
HasAttributedMembers(typeDeclaration);
|
||||
}
|
||||
|
||||
public static PanelStateIncrementalGeneratorTypeTarget? Transform(
|
||||
GeneratorSyntaxContext context,
|
||||
CancellationToken cancellationToken
|
||||
GeneratorSyntaxContext context,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
@@ -26,14 +34,12 @@ namespace StgSharp.UserInterface.Generator
|
||||
return null;
|
||||
}
|
||||
|
||||
if (context.SemanticModel.GetDeclaredSymbol(typeDeclaration, cancellationToken) is not INamedTypeSymbol typeSymbol)
|
||||
{
|
||||
if (context.SemanticModel.GetDeclaredSymbol(typeDeclaration, cancellationToken) is not INamedTypeSymbol typeSymbol) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ImmutableArray<PanelStateIncrementalGeneratorMarkedMember> markedMembers = CollectMarkedMembers(typeSymbol);
|
||||
if (markedMembers.IsDefaultOrEmpty)
|
||||
{
|
||||
if (markedMembers.IsDefaultOrEmpty) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -43,6 +49,50 @@ namespace StgSharp.UserInterface.Generator
|
||||
markedMembers);
|
||||
}
|
||||
|
||||
private static ImmutableArray<PanelStateIncrementalGeneratorMarkedMember> CollectMarkedMembers(
|
||||
INamedTypeSymbol typeSymbol
|
||||
)
|
||||
{
|
||||
ImmutableArray<PanelStateIncrementalGeneratorMarkedMember>.Builder builder =
|
||||
ImmutableArray.CreateBuilder<PanelStateIncrementalGeneratorMarkedMember>();
|
||||
|
||||
foreach (ISymbol member in typeSymbol.GetMembers())
|
||||
{
|
||||
foreach (AttributeData attributeData in member.GetAttributes())
|
||||
{
|
||||
string? metadataName = attributeData.AttributeClass?.ToDisplayString();
|
||||
if (!PanelStateIncrementalGeneratorKnownAttributes.IsKnown(metadataName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
builder.Add(
|
||||
new PanelStateIncrementalGeneratorMarkedMember(member, metadataName!,
|
||||
member.Name,
|
||||
GetSymbolTypeName(member)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return builder.ToImmutable();
|
||||
}
|
||||
|
||||
private static string GetSymbolTypeName(
|
||||
ISymbol symbol
|
||||
)
|
||||
{
|
||||
return symbol switch
|
||||
{
|
||||
IFieldSymbol fieldSymbol => fieldSymbol.Type
|
||||
.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
IPropertySymbol propertySymbol => propertySymbol.Type
|
||||
.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
IMethodSymbol methodSymbol => methodSymbol.ReturnType
|
||||
.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
_ => symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)
|
||||
};
|
||||
}
|
||||
|
||||
private static bool HasAttributedMembers(
|
||||
TypeDeclarationSyntax typeDeclaration
|
||||
)
|
||||
@@ -61,48 +111,5 @@ namespace StgSharp.UserInterface.Generator
|
||||
return false;
|
||||
}
|
||||
|
||||
private static ImmutableArray<PanelStateIncrementalGeneratorMarkedMember> CollectMarkedMembers(
|
||||
INamedTypeSymbol typeSymbol
|
||||
)
|
||||
{
|
||||
ImmutableArray<PanelStateIncrementalGeneratorMarkedMember>.Builder builder =
|
||||
ImmutableArray.CreateBuilder<PanelStateIncrementalGeneratorMarkedMember>();
|
||||
|
||||
foreach (ISymbol member in typeSymbol.GetMembers())
|
||||
{
|
||||
foreach (AttributeData attributeData in member.GetAttributes())
|
||||
{
|
||||
string? metadataName = attributeData.AttributeClass?.ToDisplayString();
|
||||
if (!PanelStateIncrementalGeneratorKnownAttributes.IsKnown(metadataName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
builder.Add(
|
||||
new PanelStateIncrementalGeneratorMarkedMember(
|
||||
member,
|
||||
metadataName!,
|
||||
member.Name,
|
||||
GetSymbolTypeName(member)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return builder.ToImmutable();
|
||||
}
|
||||
|
||||
private static string GetSymbolTypeName(
|
||||
ISymbol symbol
|
||||
)
|
||||
{
|
||||
return symbol switch
|
||||
{
|
||||
IFieldSymbol fieldSymbol => fieldSymbol.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
IPropertySymbol propertySymbol => propertySymbol.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
IMethodSymbol methodSymbol => methodSymbol.ReturnType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat),
|
||||
_ => symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user