From bdff84b9aa1705a7b300b5ad0f1e080b98434cac Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 22 May 2024 08:34:43 +0100 Subject: [PATCH] review feedback --- .gitignore | 2 +- src-examples/ProxyInterfaceConsumer/Address.cs | 2 ++ .../FileGenerators/ExtraFilesGenerator.cs | 10 +++++++--- src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs | 3 ++- .../SyntaxReceiver/AttributeArgumentListParser.cs | 9 +++++---- .../Types/FluentBuilderAttributeArguments.cs | 1 + .../Utils/MemberHelper.cs | 6 +++--- ...sWithArray_Should_GenerateCorrectFiles.verified.txt | 10 +++++++--- ...Test.GenerateFiles_ForClassWithIgnores.verified.txt | 10 +++++++--- 9 files changed, 35 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 313797d..e4112e8 100644 --- a/.gitignore +++ b/.gitignore @@ -350,4 +350,4 @@ MigrationBackup/ .ionide/ /tests/ProxyInterfaceSourceGeneratorTests/Destination/Disposable/*.g.cs -.idea/.idea.ProxyInterfaceSourceGenerator Solution/.idea/ +.idea/ diff --git a/src-examples/ProxyInterfaceConsumer/Address.cs b/src-examples/ProxyInterfaceConsumer/Address.cs index f440fc2..0f9bcdb 100644 --- a/src-examples/ProxyInterfaceConsumer/Address.cs +++ b/src-examples/ProxyInterfaceConsumer/Address.cs @@ -7,7 +7,9 @@ namespace ProxyInterfaceConsumer public int HouseNumber { get; set; } public event EventHandler MyEvent; + public int Weird { get; set; } + public int Weird2() { return 0; diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/ExtraFilesGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/ExtraFilesGenerator.cs index eb8fb9b..ab98772 100644 --- a/src/ProxyInterfaceSourceGenerator/FileGenerators/ExtraFilesGenerator.cs +++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/ExtraFilesGenerator.cs @@ -27,7 +27,7 @@ namespace ProxyInterfaceGenerator public Type Type {{ get; }} public bool ProxyBaseClasses {{ get; }} public ProxyClassAccessibility Accessibility {{ get; }} - public string[] MembersToIgnore {{ get; }} + public string[]? MembersToIgnore {{ get; }} public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public) {{ @@ -41,11 +41,15 @@ namespace ProxyInterfaceGenerator {{ }} - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, Array.Empty()) + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null) {{ }} - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[] membersToIgnore) + public ProxyAttribute(Type type, string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null) + {{ + }} + + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[]? membersToIgnore) {{ Type = type; ProxyBaseClasses = proxyBaseClasses; diff --git a/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs b/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs index 5110cbe..b91204a 100644 --- a/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs +++ b/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs @@ -34,7 +34,8 @@ internal class ProxyData string fullMetadataTypeName, List usings, bool proxyBaseClasses, - ProxyClassAccessibility accessibility, string[] membersToIgnore) + ProxyClassAccessibility accessibility, + string[] membersToIgnore) { Namespace = @namespace ?? throw new ArgumentNullException(nameof(@namespace)); NamespaceDot = namespaceDot ?? throw new ArgumentNullException(nameof(namespaceDot)); diff --git a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs index 52b5eae..e91bbd1 100644 --- a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs +++ b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs @@ -93,12 +93,12 @@ internal static class AttributeArgumentListParser return false; } - private static bool TryParseAsStringArray(ExpressionSyntax expressionSyntax, out string[] value) + private static bool TryParseAsStringArray(ExpressionSyntax expressionSyntax, [NotNullWhen(true)] out string[] value) { - if (expressionSyntax is ImplicitArrayCreationExpressionSyntax lmplicitArrayCreationExpressionSyntax) + if (expressionSyntax is ImplicitArrayCreationExpressionSyntax implicitArrayCreationExpressionSyntax) { var strings = new List(); - foreach (var expression in lmplicitArrayCreationExpressionSyntax.Initializer.Expressions) + foreach (var expression in implicitArrayCreationExpressionSyntax.Initializer.Expressions) { if (expression.GetFirstToken().Value is string s) { @@ -108,7 +108,8 @@ internal static class AttributeArgumentListParser value = strings.ToArray(); return true; } - value = Array.Empty(); + + value = default; return false; } } \ No newline at end of file diff --git a/src/ProxyInterfaceSourceGenerator/Types/FluentBuilderAttributeArguments.cs b/src/ProxyInterfaceSourceGenerator/Types/FluentBuilderAttributeArguments.cs index b1af428..9fac5a5 100644 --- a/src/ProxyInterfaceSourceGenerator/Types/FluentBuilderAttributeArguments.cs +++ b/src/ProxyInterfaceSourceGenerator/Types/FluentBuilderAttributeArguments.cs @@ -5,5 +5,6 @@ internal record ProxyInterfaceGeneratorAttributeArguments(string FullyQualifiedD public bool ProxyBaseClasses { get; set; } public ProxyClassAccessibility Accessibility { get; set; } + public string[] MembersToIgnore { get; set; } = Array.Empty(); } \ No newline at end of file diff --git a/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs b/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs index 00cce5c..cc2b276 100644 --- a/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs +++ b/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs @@ -86,9 +86,9 @@ internal static class MemberHelper var membersQuery = classSymbol.Symbol.GetMembers().OfType() .Where(m => m.DeclaredAccessibility == Accessibility.Public); - var f = filters.ToList(); - f.Add(x => !proxyData.MembersToIgnore.Contains(x.Name)); - foreach (var filter in f) + var allFilters = filters.ToList(); + allFilters.Add(x => !proxyData.MembersToIgnore.Contains(x.Name)); + foreach (var filter in allFilters) { membersQuery = membersQuery.Where(filter); } diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.verified.txt b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.verified.txt index 0c9e0a8..92ef9c7 100644 --- a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.verified.txt +++ b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.verified.txt @@ -21,7 +21,7 @@ namespace ProxyInterfaceGenerator public Type Type { get; } public bool ProxyBaseClasses { get; } public ProxyClassAccessibility Accessibility { get; } - public string[] MembersToIgnore { get; } + public string[]? MembersToIgnore { get; } public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public) { @@ -35,11 +35,15 @@ namespace ProxyInterfaceGenerator { } - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, Array.Empty()) + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null) { } - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[] membersToIgnore) + public ProxyAttribute(Type type, string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null) + { + } + + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[]? membersToIgnore) { Type = type; ProxyBaseClasses = proxyBaseClasses; diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.verified.txt b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.verified.txt index c2b7afe..d641745 100644 --- a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.verified.txt +++ b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.verified.txt @@ -21,7 +21,7 @@ namespace ProxyInterfaceGenerator public Type Type { get; } public bool ProxyBaseClasses { get; } public ProxyClassAccessibility Accessibility { get; } - public string[] MembersToIgnore { get; } + public string[]? MembersToIgnore { get; } public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public) { @@ -35,11 +35,15 @@ namespace ProxyInterfaceGenerator { } - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, Array.Empty()) + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null) { } - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[] membersToIgnore) + public ProxyAttribute(Type type, string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null) + { + } + + public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[]? membersToIgnore) { Type = type; ProxyBaseClasses = proxyBaseClasses;