diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs index 27f7c65..c4c7448 100644 --- a/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs +++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs @@ -64,9 +64,9 @@ internal class PartialInterfacesGenerator : BaseGenerator, IFilesGenerator var implements = implementedInterfacesNames.Any() ? $" : {string.Join(", ", implementedInterfacesNames)}" : string.Empty; var @new = extendsProxyClasses.Any() ? "new " : string.Empty; var (namespaceStart, namespaceEnd) = NamespaceBuilder.Build(ns); - var events = GenerateEvents(classSymbol, proxyData.ProxyBaseClasses); - var properties = GenerateProperties(classSymbol, proxyData.ProxyBaseClasses); - var methods = GenerateMethods(classSymbol, proxyData.ProxyBaseClasses).TrimEnd(); + var events = GenerateEvents(classSymbol, proxyData); + var properties = GenerateProperties(classSymbol, proxyData); + var methods = GenerateMethods(classSymbol, proxyData).TrimEnd(); return $@"//---------------------------------------------------------------------------------------- // @@ -109,11 +109,11 @@ methods} return t => !hashSet.Contains(t.Name); } - private string GenerateProperties(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GenerateProperties(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var property in MemberHelper.GetPublicProperties(targetClassSymbol, proxyBaseClasses, InterfaceFilter())) + foreach (var property in MemberHelper.GetPublicProperties(targetClassSymbol, proxyData, InterfaceFilter())) { var type = GetPropertyType(property, out var isReplaced); @@ -142,10 +142,10 @@ methods} return str.ToString(); } - private string GenerateMethods(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GenerateMethods(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var method in MemberHelper.GetPublicMethods(targetClassSymbol, proxyBaseClasses, InterfaceFilter())) + foreach (var method in MemberHelper.GetPublicMethods(targetClassSymbol, proxyData, InterfaceFilter())) { var methodParameters = GetMethodParameters(method.Parameters, true); var whereStatement = GetWhereStatementFromMethod(method); @@ -162,10 +162,10 @@ methods} return str.ToString(); } - private string GenerateEvents(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GenerateEvents(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var @event in MemberHelper.GetPublicEvents(targetClassSymbol, proxyBaseClasses, InterfaceFilter())) + foreach (var @event in MemberHelper.GetPublicEvents(targetClassSymbol, proxyData, InterfaceFilter())) { var ps = @event.First().Parameters.First(); var type = ps.GetTypeEnum() == TypeEnum.Complex ? GetParameterType(ps, out _) : ps.Type.ToString(); diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs index cf8dbf9..58b0cc9 100644 --- a/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs +++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs @@ -76,10 +76,10 @@ internal partial class ProxyClassesGenerator : BaseGenerator, IFilesGenerator } var @abstract = string.Empty; // targetClassSymbol.Symbol.IsAbstract ? "abstract " : string.Empty; - var properties = GeneratePublicProperties(targetClassSymbol, pd.ProxyBaseClasses); - var methods = GeneratePublicMethods(targetClassSymbol, pd.ProxyBaseClasses); - var events = GenerateEvents(targetClassSymbol, pd.ProxyBaseClasses); - var operators = GenerateOperators(targetClassSymbol, pd.ProxyBaseClasses); + var properties = GeneratePublicProperties(targetClassSymbol, pd); + var methods = GeneratePublicMethods(targetClassSymbol, pd); + var events = GenerateEvents(targetClassSymbol, pd); + var operators = GenerateOperators(targetClassSymbol, pd); var configurationForMapster = string.Empty; if (Context.ReplacedTypes.Count > 0) @@ -124,11 +124,11 @@ operators} {SupportsNullable.IIf("#nullable restore")}"; } - private string GeneratePublicProperties(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GeneratePublicProperties(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var property in MemberHelper.GetPublicProperties(targetClassSymbol, proxyBaseClasses)) + foreach (var property in MemberHelper.GetPublicProperties(targetClassSymbol, proxyData)) { var type = GetPropertyType(property, out var isReplaced); @@ -190,11 +190,11 @@ operators} return str.ToString(); } - private string GeneratePublicMethods(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GeneratePublicMethods(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - var methods = MemberHelper.GetPublicMethods(targetClassSymbol, proxyBaseClasses); + var methods = MemberHelper.GetPublicMethods(targetClassSymbol, proxyData); foreach (var method in methods) { @@ -305,10 +305,10 @@ operators} return str.ToString(); } - private string GenerateEvents(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GenerateEvents(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var @event in MemberHelper.GetPublicEvents(targetClassSymbol, proxyBaseClasses)) + foreach (var @event in MemberHelper.GetPublicEvents(targetClassSymbol, proxyData)) { var name = @event.Key.GetSanitizedName(); var ps = @event.First().Parameters.First(); @@ -337,16 +337,21 @@ operators} return str.ToString(); } - private string GenerateOperators(ClassSymbol targetClassSymbol, bool proxyBaseClasses) + private string GenerateOperators(ClassSymbol targetClassSymbol, ProxyData proxyData) { var str = new StringBuilder(); - foreach (var @operator in MemberHelper.GetPublicStaticOperators(targetClassSymbol, proxyBaseClasses)) + foreach (var @operator in MemberHelper.GetPublicStaticOperators(targetClassSymbol, proxyData)) { foreach (var attribute in @operator.GetAttributesAsList()) { str.AppendLine($" {attribute}"); } + if (!@operator.Parameters.Any()) + { + continue; + } + var parameter = @operator.Parameters.First(); var proxyClassName = targetClassSymbol.Symbol.ResolveProxyClassName(); diff --git a/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs b/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs index 3a4a407..5110cbe 100644 --- a/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs +++ b/src/ProxyInterfaceSourceGenerator/Models/ProxyData.cs @@ -23,17 +23,18 @@ internal class ProxyData public bool ProxyBaseClasses { get; } public ProxyClassAccessibility Accessibility { get; } + public string[] MembersToIgnore { get; } public ProxyData(string @namespace, - string namespaceDot, - string shortInterfaceName, - string fullInterfaceName, - string fullQualifiedTypeName, - string shortMetadataTypeName, - string fullMetadataTypeName, - List usings, - bool proxyBaseClasses, - ProxyClassAccessibility accessibility) + string namespaceDot, + string shortInterfaceName, + string fullInterfaceName, + string fullQualifiedTypeName, + string shortMetadataTypeName, + string fullMetadataTypeName, + List usings, + bool proxyBaseClasses, + ProxyClassAccessibility accessibility, string[] membersToIgnore) { Namespace = @namespace ?? throw new ArgumentNullException(nameof(@namespace)); NamespaceDot = namespaceDot ?? throw new ArgumentNullException(nameof(namespaceDot)); @@ -45,5 +46,6 @@ internal class ProxyData Usings = usings ?? throw new ArgumentNullException(nameof(usings)); ProxyBaseClasses = proxyBaseClasses; Accessibility = accessibility; + MembersToIgnore = membersToIgnore; } } \ No newline at end of file diff --git a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs index 91a8e66..7b7f028 100644 --- a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs +++ b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/AttributeArgumentListParser.cs @@ -29,6 +29,11 @@ internal static class AttributeArgumentListParser foreach (var argument in argumentList.Arguments.Skip(1)) { + if (TryParseAsStringArray(argument.Expression, out var membersToIgnore)) + { + result = result with { MembersToIgnore = membersToIgnore }; + continue; + } if (TryParseAsBoolean(argument.Expression, out var proxyBaseClasses)) { result = result with { ProxyBaseClasses = proxyBaseClasses }; @@ -87,4 +92,23 @@ internal static class AttributeArgumentListParser value = default; return false; } + + private static bool TryParseAsStringArray(ExpressionSyntax expressionSyntax, out string[] value) + { + if (expressionSyntax is ImplicitArrayCreationExpressionSyntax lmplicitArrayCreationExpressionSyntax) + { + var strings = new List(); + foreach (var expression in lmplicitArrayCreationExpressionSyntax.Initializer.Expressions) + { + if (expression.GetFirstToken().Value is string s) + { + strings.Add(s); + } + } + value = strings.ToArray(); + return true; + } + value = Array.Empty(); + return false; + } } \ No newline at end of file diff --git a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs index facc5ed..121b340 100644 --- a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs +++ b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs @@ -77,7 +77,8 @@ internal class ProxySyntaxReceiver : ISyntaxContextReceiver shortMetadataTypeName: metadataName.Split('.').Last(), usings: usings, proxyBaseClasses: fluentBuilderAttributeArguments.ProxyBaseClasses, - accessibility: fluentBuilderAttributeArguments.Accessibility + accessibility: fluentBuilderAttributeArguments.Accessibility, + membersToIgnore: fluentBuilderAttributeArguments.MembersToIgnore ); return true; diff --git a/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs b/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs index 39236b9..7498d39 100644 --- a/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs +++ b/src/ProxyInterfaceSourceGenerator/Utils/MemberHelper.cs @@ -9,7 +9,7 @@ internal static class MemberHelper public static IReadOnlyList GetPublicProperties( ClassSymbol classSymbol, - bool proxyBaseClasses, + ProxyData proxyData, params Func[] filters) { var allFilters = new List>(filters) @@ -17,12 +17,12 @@ internal static class MemberHelper p => p.Kind == SymbolKind.Property }; - return GetPublicMembers(classSymbol, proxyBaseClasses, allFilters.ToArray()).ToArray(); + return GetPublicMembers(classSymbol, proxyData, allFilters.ToArray()).ToArray(); } public static IReadOnlyList GetPublicMethods( ClassSymbol classSymbol, - bool proxyBaseClasses, + ProxyData proxyData, Func? filter = null) { filter ??= _ => true; @@ -30,7 +30,7 @@ internal static class MemberHelper return GetPublicMembers( classSymbol, - proxyBaseClasses, + proxyData, m => m.Kind == SymbolKind.Method, m => m.MethodKind == MethodKind.Ordinary, m => !ExcludedMethods.Contains(m.Name), @@ -40,7 +40,7 @@ internal static class MemberHelper public static IReadOnlyList GetPublicStaticOperators( ClassSymbol classSymbol, - bool proxyBaseClasses, + ProxyData proxyData, Func? filter = null) { filter ??= _ => true; @@ -48,7 +48,7 @@ internal static class MemberHelper return GetPublicMembers( classSymbol, - proxyBaseClasses, + proxyData, m => m.Kind == SymbolKind.Method, m => m.MethodKind == MethodKind.Conversion, m => !ExcludedMethods.Contains(m.Name), @@ -58,7 +58,7 @@ internal static class MemberHelper public static IReadOnlyList> GetPublicEvents( ClassSymbol classSymbol, - bool proxyBaseClasses, + ProxyData proxyData, Func? filter = null) { filter ??= _ => true; @@ -67,7 +67,7 @@ internal static class MemberHelper #pragma warning disable RS1024 // Compare symbols correctly return GetPublicMembers( classSymbol, - proxyBaseClasses, + proxyData, m => m.MethodKind is MethodKind.EventAdd or MethodKind.EventRemove/* || m.MethodKind == MethodKind.EventRaise*/, filter) .GroupBy(e => e.AssociatedSymbol) @@ -79,7 +79,7 @@ internal static class MemberHelper // TODO : do we need also to check for "SanitizedName()" here? private static IReadOnlyList GetPublicMembers( ClassSymbol classSymbol, - bool proxyBaseClasses, + ProxyData proxyData, params Func[] filters ) where T : ISymbol { @@ -94,7 +94,7 @@ internal static class MemberHelper var ownMembers = membersQuery.ToList(); var ownMemberNames = ownMembers.Select(x => x.Name); - if (!proxyBaseClasses) + if (!proxyData.ProxyBaseClasses) { return ownMembers; } diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt deleted file mode 100644 index 3cd00f2..0000000 --- a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt +++ /dev/null @@ -1,117 +0,0 @@ -[ - { - HintName: ProxyInterfaceGenerator.Extra.g.cs, - Source: -//---------------------------------------------------------------------------------------- -// -// This code was generated by https://github.com/StefH/ProxyInterfaceSourceGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//---------------------------------------------------------------------------------------- - -using System; - -namespace ProxyInterfaceGenerator -{ - [AttributeUsage(AttributeTargets.Interface)] - internal sealed class ProxyAttribute : Attribute - { - public Type Type { get; } - public bool ProxyBaseClasses { get; } - public ProxyClassAccessibility Accessibility { get; } - public string[] MembersToIgnore { get; } - - public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public) - { - } - - public ProxyAttribute(Type type, ProxyClassAccessibility accessibility) : this(type, false, accessibility) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, Array.Empty()) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[] membersToIgnore) - { - Type = type; - ProxyBaseClasses = proxyBaseClasses; - Accessibility = accessibility; - MembersToIgnore = membersToIgnore; - } - } - - [Flags] - internal enum ProxyClassAccessibility - { - Public = 0, - - Internal = 1 - } -} - }, - { - HintName: ProxyInterfaceSourceGeneratorTests.Source.IFoo.g.cs, - Source: -//---------------------------------------------------------------------------------------- -// -// This code was generated by https://github.com/StefH/ProxyInterfaceSourceGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//---------------------------------------------------------------------------------------- - -#nullable enable -using System; - -namespace ProxyInterfaceSourceGeneratorTests.Source -{ - public partial interface IFoo - { - global::ProxyInterfaceSourceGeneratorTests.Source.Foo _Instance { get; } - - global::ProxyInterfaceSourceGeneratorTests.Source.IFoo[] Foos { get; set; } - - global::ProxyInterfaceSourceGeneratorTests.Source.IFoo[] DoSomethingAndGetAnArrayOfFoos(); - } -} -#nullable restore - }, - { - HintName: Error.g.cs, - Source: -/* -ProxyInterfaceCodeGenerator - -[Exception] -System.InvalidOperationException: Sequence contains no elements - at System.Linq.ThrowHelper.ThrowNoElementsException() - at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) - at System.Linq.ImmutableArrayExtensions.First[T](ImmutableArray`1 immutableArray) - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateOperators(ClassSymbol targetClassSymbol, ProxyData proxyData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 350 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.CreateProxyClassCode(ProxyData pd, ClassSymbol targetClassSymbol, IReadOnlyList`1 extendsProxyClasses, String interfaceName, String className, String constructorName) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 82 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.TryGenerateFile(ProxyData pd, FileData& fileData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 46 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateFiles()+MoveNext() in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 23 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.GenerateProxyClasses(GeneratorExecutionContext ctx, ProxySyntaxReceiver receiver, Boolean supportsNullable) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 101 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.Execute(GeneratorExecutionContext context) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 51 - -[StackTrace] - at System.Linq.ThrowHelper.ThrowNoElementsException() - at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) - at System.Linq.ImmutableArrayExtensions.First[T](ImmutableArray`1 immutableArray) - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateOperators(ClassSymbol targetClassSymbol, ProxyData proxyData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 350 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.CreateProxyClassCode(ProxyData pd, ClassSymbol targetClassSymbol, IReadOnlyList`1 extendsProxyClasses, String interfaceName, String className, String constructorName) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 82 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.TryGenerateFile(ProxyData pd, FileData& fileData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 46 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateFiles()+MoveNext() in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 23 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.GenerateProxyClasses(GeneratorExecutionContext ctx, ProxySyntaxReceiver receiver, Boolean supportsNullable) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 101 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.Execute(GeneratorExecutionContext context) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 51*/ - } -] \ No newline at end of file diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.received.txt b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.received.txt deleted file mode 100644 index 1e9a316..0000000 --- a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.received.txt +++ /dev/null @@ -1,117 +0,0 @@ -[ - { - HintName: ProxyInterfaceGenerator.Extra.g.cs, - Source: -//---------------------------------------------------------------------------------------- -// -// This code was generated by https://github.com/StefH/ProxyInterfaceSourceGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//---------------------------------------------------------------------------------------- - -using System; - -namespace ProxyInterfaceGenerator -{ - [AttributeUsage(AttributeTargets.Interface)] - internal sealed class ProxyAttribute : Attribute - { - public Type Type { get; } - public bool ProxyBaseClasses { get; } - public ProxyClassAccessibility Accessibility { get; } - public string[] MembersToIgnore { get; } - - public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public) - { - } - - public ProxyAttribute(Type type, ProxyClassAccessibility accessibility) : this(type, false, accessibility) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, Array.Empty()) - { - } - - public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[] membersToIgnore) - { - Type = type; - ProxyBaseClasses = proxyBaseClasses; - Accessibility = accessibility; - MembersToIgnore = membersToIgnore; - } - } - - [Flags] - internal enum ProxyClassAccessibility - { - Public = 0, - - Internal = 1 - } -} - }, - { - HintName: ProxyInterfaceSourceGeneratorTests.Source.IFoo2.g.cs, - Source: -//---------------------------------------------------------------------------------------- -// -// This code was generated by https://github.com/StefH/ProxyInterfaceSourceGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//---------------------------------------------------------------------------------------- - -#nullable enable -using System; - -namespace ProxyInterfaceSourceGeneratorTests.Source -{ - public partial interface IFoo2 - { - global::ProxyInterfaceSourceGeneratorTests.Source.Foo2 _Instance { get; } - - global::ProxyInterfaceSourceGeneratorTests.Source.IFoo2[] Foos { get; set; } - - global::ProxyInterfaceSourceGeneratorTests.Source.IFoo2[] DoSomethingAndGetAnArrayOfFoos(); - } -} -#nullable restore - }, - { - HintName: Error.g.cs, - Source: -/* -ProxyInterfaceCodeGenerator - -[Exception] -System.InvalidOperationException: Sequence contains no elements - at System.Linq.ThrowHelper.ThrowNoElementsException() - at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) - at System.Linq.ImmutableArrayExtensions.First[T](ImmutableArray`1 immutableArray) - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateOperators(ClassSymbol targetClassSymbol, ProxyData proxyData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 350 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.CreateProxyClassCode(ProxyData pd, ClassSymbol targetClassSymbol, IReadOnlyList`1 extendsProxyClasses, String interfaceName, String className, String constructorName) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 82 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.TryGenerateFile(ProxyData pd, FileData& fileData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 46 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateFiles()+MoveNext() in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 23 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.GenerateProxyClasses(GeneratorExecutionContext ctx, ProxySyntaxReceiver receiver, Boolean supportsNullable) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 101 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.Execute(GeneratorExecutionContext context) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 51 - -[StackTrace] - at System.Linq.ThrowHelper.ThrowNoElementsException() - at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) - at System.Linq.ImmutableArrayExtensions.First[T](ImmutableArray`1 immutableArray) - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateOperators(ClassSymbol targetClassSymbol, ProxyData proxyData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 350 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.CreateProxyClassCode(ProxyData pd, ClassSymbol targetClassSymbol, IReadOnlyList`1 extendsProxyClasses, String interfaceName, String className, String constructorName) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 82 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.TryGenerateFile(ProxyData pd, FileData& fileData) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 46 - at ProxyInterfaceSourceGenerator.FileGenerators.ProxyClassesGenerator.GenerateFiles()+MoveNext() in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\FileGenerators\ProxyClassesGenerator.cs:line 23 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.GenerateProxyClasses(GeneratorExecutionContext ctx, ProxySyntaxReceiver receiver, Boolean supportsNullable) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 101 - at ProxyInterfaceSourceGenerator.ProxyInterfaceCodeGenerator.Execute(GeneratorExecutionContext context) in {SolutionDirectory}src\ProxyInterfaceSourceGenerator\ProxyInterfaceCodeGenerator.cs:line 51*/ - } -] \ No newline at end of file