intermediate commit

This commit is contained in:
Adam Hathcock
2024-05-21 13:55:59 +01:00
parent 5568a98e0b
commit e5a0b7b7d3
4 changed files with 240 additions and 2 deletions
@@ -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
{
}
@@ -0,0 +1,117 @@
[
{
HintName: ProxyInterfaceGenerator.Extra.g.cs,
Source:
//----------------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//----------------------------------------------------------------------------------------
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<string>())
{
}
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:
//----------------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//----------------------------------------------------------------------------------------
#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*/
}
]
@@ -0,0 +1,117 @@
[
{
HintName: ProxyInterfaceGenerator.Extra.g.cs,
Source:
//----------------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//----------------------------------------------------------------------------------------
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<string>())
{
}
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:
//----------------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//----------------------------------------------------------------------------------------
#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*/
}
]
@@ -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\"}"
}
}
};