From f656f07bfe650c50be71c28571cbdb8d04d42e19 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Wed, 23 Apr 2025 08:04:12 +1000 Subject: [PATCH] A couple refactors for `RoslynUtils` and `DefaultSetterGenerator` --- .../AnalyzersCommon/RoslynUtils.cs | 20 ++++++++++---- .../ReflectionCacheGenerator.cs | 10 ++----- .../DefaultSetterGenerator.cs | 26 ++++++++++-------- References/BizHawk.SrcGen.ReflectionCache.dll | Bin 14848 -> 23040 bytes References/BizHawk.SrcGen.SettingsUtil.dll | Bin 13824 -> 22528 bytes .../Computers/Commodore64/C64.ISettable.cs | 1 - .../Computers/MSX/MSX.ISettable.cs | 2 +- 7 files changed, 32 insertions(+), 27 deletions(-) diff --git a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs index ae51b4353c..2c2ce1f596 100644 --- a/ExternalProjects/AnalyzersCommon/RoslynUtils.cs +++ b/ExternalProjects/AnalyzersCommon/RoslynUtils.cs @@ -6,12 +6,8 @@ using System.Threading; public static class RoslynUtils { - public static SyntaxNode? EnclosingTypeDeclarationSyntax(this CSharpSyntaxNode node) - { - var parent = node.Parent; - while (parent is not (null or TypeDeclarationSyntax)) parent = parent.Parent; - return parent; - } + public static TypeDeclarationSyntax? EnclosingTypeDeclarationSyntax(this CSharpSyntaxNode node) + => node.NearestAncestorOfType(); public static string GetMethodName(this ConversionOperatorDeclarationSyntax cods) => cods.ImplicitOrExplicitKeyword.ToString() is "implicit" @@ -132,9 +128,21 @@ public static class RoslynUtils SyntaxNodeAnalysisContext snac) => list.Matching(targetAttrSym, snac.SemanticModel, snac.CancellationToken); + public static T? NearestAncestorOfType(this CSharpSyntaxNode node) + where T : CSharpSyntaxNode + => node.Parent?.FirstAncestorOrSelf(); + public static TextSpan Slice(this TextSpan span, int start) => TextSpan.FromBounds(start: span.Start + start, end: span.End); public static TextSpan Slice(this TextSpan span, int start, int length) => new(start: span.Start + start, length: length); + + public static string ToMetadataNameStr(this NameSyntax nameSyn) + => nameSyn switch + { + QualifiedNameSyntax qual => $"{qual.Left.ToMetadataNameStr()}.{qual.Right.ToMetadataNameStr()}", + SimpleNameSyntax simple => simple.Identifier.ValueText, + _ => throw new InvalidOperationException(), + }; } diff --git a/ExternalProjects/BizHawk.SrcGen.ReflectionCache/ReflectionCacheGenerator.cs b/ExternalProjects/BizHawk.SrcGen.ReflectionCache/ReflectionCacheGenerator.cs index 1974796e43..a0aed303b7 100644 --- a/ExternalProjects/BizHawk.SrcGen.ReflectionCache/ReflectionCacheGenerator.cs +++ b/ExternalProjects/BizHawk.SrcGen.ReflectionCache/ReflectionCacheGenerator.cs @@ -4,6 +4,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BizHawk.Analyzers; + [Generator] public sealed class ReflectionCacheGenerator : ISourceGenerator { @@ -35,14 +37,8 @@ public sealed class ReflectionCacheGenerator : ISourceGenerator public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { - static string Ser(NameSyntax nameSyn) => nameSyn switch - { - SimpleNameSyntax simple => simple.Identifier.ValueText, - QualifiedNameSyntax qual => $"{Ser(qual.Left)}.{Ser(qual.Right)}", - _ => throw new InvalidOperationException(), - }; if (_namespace != null || syntaxNode is not NamespaceDeclarationSyntax syn) return; - var newNS = Ser(syn.Name); + var newNS = syn.Name.ToMetadataNameStr(); if (!newNS.StartsWith("BizHawk.", StringComparison.Ordinal)) return; _namespaces.Add(newNS); if (_namespaces.Count == SAMPLE_SIZE) _namespace = CalcNamespace(); diff --git a/ExternalProjects/BizHawk.SrcGen.SettingsUtil/DefaultSetterGenerator.cs b/ExternalProjects/BizHawk.SrcGen.SettingsUtil/DefaultSetterGenerator.cs index 2d4a55f182..505cf1131f 100644 --- a/ExternalProjects/BizHawk.SrcGen.SettingsUtil/DefaultSetterGenerator.cs +++ b/ExternalProjects/BizHawk.SrcGen.SettingsUtil/DefaultSetterGenerator.cs @@ -5,12 +5,14 @@ using System.Collections.Immutable; using System.Linq; using System.Text; +using BizHawk.Analyzers; + [Generator] public class DefaultSetterGenerator : ISourceGenerator { public class SyntaxReceiver : ISyntaxContextReceiver { - public readonly List<(ClassDeclarationSyntax, SemanticModel)> ClassDeclarations = new(); + public readonly List<(ClassDeclarationSyntax CDS, SemanticModel SemanticModel)> ClassDeclarations = new(); public void OnVisitSyntaxNode(GeneratorSyntaxContext context) { @@ -82,25 +84,25 @@ public class DefaultSetterGenerator : ISourceGenerator { return; } + var consumerAttrSym = context.Compilation.GetTypeByMetadataName("BizHawk.Emulation.Common.CoreSettingsAttribute"); + if (consumerAttrSym is null) return; // Generated source code var source = new StringBuilder(@" -namespace BizHawk.Common +namespace BizHawk.Emulation.Cores { public static partial class SettingsUtil {"); - foreach (var (cds, semanticModel) in syntaxReceiver.ClassDeclarations) + foreach (var (cds, semanticModel) in syntaxReceiver.ClassDeclarations + .Where(tuple => tuple.CDS.AttributeLists.Matching( + consumerAttrSym, + tuple.SemanticModel, + context.CancellationToken).Any())) { - if (cds.AttributeLists.SelectMany(e => e.Attributes) - .Any(e => e.Name.NormalizeWhitespace().ToFullString() == "CoreSettings")) - { - var symbol = semanticModel.GetDeclaredSymbol(cds, context.CancellationToken); - if (symbol is not null) // probably never happens? - { - CreateDefaultSetter(source, symbol); - } - } + var symbol = semanticModel.GetDeclaredSymbol(cds, context.CancellationToken); + if (symbol is null) continue; // probably never happens? + CreateDefaultSetter(source, symbol); } source.Append(@" diff --git a/References/BizHawk.SrcGen.ReflectionCache.dll b/References/BizHawk.SrcGen.ReflectionCache.dll index d201f895a80079967e9d3935e9ff9cb459bffef9..186a2add54808208527e9ec350d6be8542485931 100644 GIT binary patch literal 23040 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 eY5d>dPcH)9I5ffQzi6(`=@6 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 diff --git a/References/BizHawk.SrcGen.SettingsUtil.dll b/References/BizHawk.SrcGen.SettingsUtil.dll index d2d9636c953e826a2875db200bc01d61b169366f..be0335a61959b63614145540c870423a33f8147f 100644 GIT binary patch literal 22528 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 DwzDrC literal 13824 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 U)?f>XL9WJE=l?kV|3%<`0KFwsNB{r; diff --git a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs index 65203ab17e..287c6e473b 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using BizHawk.Common; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64 diff --git a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.ISettable.cs b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.ISettable.cs index e98f1bc583..0f5550081f 100644 --- a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.ISettable.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using BizHawk.Common; + using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.MSX