diff --git a/src-examples/ProxyInterfaceConsumer/IAddress.cs b/src-examples/ProxyInterfaceConsumer/IAddress.cs index 2343753..baa0980 100644 --- a/src-examples/ProxyInterfaceConsumer/IAddress.cs +++ b/src-examples/ProxyInterfaceConsumer/IAddress.cs @@ -2,7 +2,7 @@ using ProxyInterfaceGenerator; namespace ProxyInterfaceConsumer { - [ProxyInterfaceGenerator.Proxy(typeof(Address), false, ProxyClassAccessibility.Public, new []{"Weird"})] + [Proxy(typeof(Address), false, ProxyClassAccessibility.Public, new []{"Weird"})] public partial interface IAddress { } diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt new file mode 100644 index 0000000..3cd00f2 --- /dev/null +++ b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.received.txt @@ -0,0 +1,117 @@ +[ + { + 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 new file mode 100644 index 0000000..1e9a316 --- /dev/null +++ b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.received.txt @@ -0,0 +1,117 @@ +[ + { + 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 diff --git a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.cs b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.cs index 758cfe9..bb9f9b1 100644 --- a/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.cs +++ b/tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.cs @@ -105,7 +105,11 @@ public class ProxyInterfaceSourceGeneratorTest AttributeToAddToInterface = new ExtraAttribute { Name = "ProxyInterfaceGenerator.Proxy", - ArgumentList = "typeof(ProxyInterfaceSourceGeneratorTests.Source.Foo2)" + ArgumentList = new [] + { + "typeof(ProxyInterfaceSourceGeneratorTests.Source.Foo2)", "false", "ProxyClassAccessibility.Public", + "new []{\"Weird\"}" + } } };