Skip to content

Commit bdfd521

Browse files
authored
Fix ProxyAttribute<T> (#86)
* Fix ProxyAttribute<T> * .
1 parent 4c8b52d commit bdfd521

6 files changed

+139
-50
lines changed

src/ProxyInterfaceSourceGenerator/FileGenerators/ExtraFilesGenerator.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,23 @@ public ProxyAttribute() : this(false, ProxyClassAccessibility.Public)
6666
{{
6767
}}
6868
69-
public ProxyAttribute(bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public)
69+
public ProxyAttribute(bool proxyBaseClasses) : this(proxyBaseClasses, ProxyClassAccessibility.Public)
7070
{{
7171
}}
7272
73-
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(type, false, accessibility)
73+
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(false, accessibility)
7474
{{
7575
}}
7676
77-
public ProxyAttribute(ProxyClassAccessibility accessibility, {stringArray} membersToIgnore) : this(type, false, accessibility, membersToIgnore)
77+
public ProxyAttribute(ProxyClassAccessibility accessibility, {stringArray} membersToIgnore) : this(false, accessibility, membersToIgnore)
7878
{{
7979
}}
8080
81-
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null)
81+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(proxyBaseClasses, accessibility, null)
8282
{{
8383
}}
8484
85-
public ProxyAttribute({stringArray} membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null)
85+
public ProxyAttribute({stringArray} membersToIgnore) : this(false, ProxyClassAccessibility.Public, null)
8686
{{
8787
}}
8888
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
//----------------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by https://github.com/StefH/ProxyInterfaceSourceGenerator.
4+
//
5+
// Changes to this file may cause incorrect behavior and will be lost if
6+
// the code is regenerated.
7+
// </auto-generated>
8+
//----------------------------------------------------------------------------------------
9+
10+
#nullable enable
11+
using System;
12+
13+
namespace ProxyInterfaceGenerator
14+
{
15+
16+
[AttributeUsage(AttributeTargets.Interface)]
17+
internal sealed class ProxyAttribute : Attribute
18+
{
19+
public Type Type { get; }
20+
public bool ProxyBaseClasses { get; }
21+
public ProxyClassAccessibility Accessibility { get; }
22+
public string[]? MembersToIgnore { get; }
23+
24+
public ProxyAttribute(Type type) : this(type, false, ProxyClassAccessibility.Public)
25+
{
26+
}
27+
28+
public ProxyAttribute(Type type, bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public)
29+
{
30+
}
31+
32+
public ProxyAttribute(Type type, ProxyClassAccessibility accessibility) : this(type, false, accessibility)
33+
{
34+
}
35+
36+
public ProxyAttribute(Type type, ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(type, false, accessibility, membersToIgnore)
37+
{
38+
}
39+
40+
public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null)
41+
{
42+
}
43+
44+
public ProxyAttribute(Type type, string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null)
45+
{
46+
}
47+
48+
public ProxyAttribute(Type type, bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[]? membersToIgnore)
49+
{
50+
Type = type;
51+
ProxyBaseClasses = proxyBaseClasses;
52+
Accessibility = accessibility;
53+
MembersToIgnore = membersToIgnore;
54+
}
55+
}
56+
57+
58+
[AttributeUsage(AttributeTargets.Interface)]
59+
internal sealed class ProxyAttribute<T> : Attribute where T : class
60+
{
61+
public Type Type { get; }
62+
public bool ProxyBaseClasses { get; }
63+
public ProxyClassAccessibility Accessibility { get; }
64+
public string[]? MembersToIgnore { get; }
65+
66+
public ProxyAttribute() : this(false, ProxyClassAccessibility.Public)
67+
{
68+
}
69+
70+
public ProxyAttribute(bool proxyBaseClasses) : this(proxyBaseClasses, ProxyClassAccessibility.Public)
71+
{
72+
}
73+
74+
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(false, accessibility)
75+
{
76+
}
77+
78+
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(false, accessibility, membersToIgnore)
79+
{
80+
}
81+
82+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(proxyBaseClasses, accessibility, null)
83+
{
84+
}
85+
86+
public ProxyAttribute(string[]? membersToIgnore) : this(false, ProxyClassAccessibility.Public, null)
87+
{
88+
}
89+
90+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility, string[]? membersToIgnore)
91+
{
92+
Type = typeof(T);
93+
ProxyBaseClasses = proxyBaseClasses;
94+
Accessibility = accessibility;
95+
MembersToIgnore = membersToIgnore;
96+
}
97+
}
98+
99+
[Flags]
100+
internal enum ProxyClassAccessibility
101+
{
102+
Public = 0,
103+
104+
Internal = 1
105+
}
106+
}
107+
#nullable restore

tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithArray_Should_GenerateCorrectFiles.verified.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,23 @@ namespace ProxyInterfaceGenerator
7171
{
7272
}
7373

74-
public ProxyAttribute(bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public)
74+
public ProxyAttribute(bool proxyBaseClasses) : this(proxyBaseClasses, ProxyClassAccessibility.Public)
7575
{
7676
}
7777

78-
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(type, false, accessibility)
78+
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(false, accessibility)
7979
{
8080
}
8181

82-
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(type, false, accessibility, membersToIgnore)
82+
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(false, accessibility, membersToIgnore)
8383
{
8484
}
8585

86-
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null)
86+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(proxyBaseClasses, accessibility, null)
8787
{
8888
}
8989

90-
public ProxyAttribute(string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null)
90+
public ProxyAttribute(string[]? membersToIgnore) : this(false, ProxyClassAccessibility.Public, null)
9191
{
9292
}
9393

tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores.verified.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,23 @@ namespace ProxyInterfaceGenerator
7171
{
7272
}
7373

74-
public ProxyAttribute(bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public)
74+
public ProxyAttribute(bool proxyBaseClasses) : this(proxyBaseClasses, ProxyClassAccessibility.Public)
7575
{
7676
}
7777

78-
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(type, false, accessibility)
78+
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(false, accessibility)
7979
{
8080
}
8181

82-
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(type, false, accessibility, membersToIgnore)
82+
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(false, accessibility, membersToIgnore)
8383
{
8484
}
8585

86-
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null)
86+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(proxyBaseClasses, accessibility, null)
8787
{
8888
}
8989

90-
public ProxyAttribute(string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null)
90+
public ProxyAttribute(string[]? membersToIgnore) : this(false, ProxyClassAccessibility.Public, null)
9191
{
9292
}
9393

tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.GenerateFiles_ForClassWithIgnores_Regex.verified.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,23 @@ namespace ProxyInterfaceGenerator
7171
{
7272
}
7373

74-
public ProxyAttribute(bool proxyBaseClasses) : this(type, proxyBaseClasses, ProxyClassAccessibility.Public)
74+
public ProxyAttribute(bool proxyBaseClasses) : this(proxyBaseClasses, ProxyClassAccessibility.Public)
7575
{
7676
}
7777

78-
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(type, false, accessibility)
78+
public ProxyAttribute(ProxyClassAccessibility accessibility) : this(false, accessibility)
7979
{
8080
}
8181

82-
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(type, false, accessibility, membersToIgnore)
82+
public ProxyAttribute(ProxyClassAccessibility accessibility, string[]? membersToIgnore) : this(false, accessibility, membersToIgnore)
8383
{
8484
}
8585

86-
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(type, proxyBaseClasses, accessibility, null)
86+
public ProxyAttribute(bool proxyBaseClasses, ProxyClassAccessibility accessibility) : this(proxyBaseClasses, accessibility, null)
8787
{
8888
}
8989

90-
public ProxyAttribute(string[]? membersToIgnore) : this(type, false, ProxyClassAccessibility.Public, null)
90+
public ProxyAttribute(string[]? membersToIgnore) : this(false, ProxyClassAccessibility.Public, null)
9191
{
9292
}
9393

tests/ProxyInterfaceSourceGeneratorTests/ProxyInterfaceSourceGeneratorTest.cs

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,12 @@ public void GenerateFiles_When_MixedVisibility_Should_GenerateCorrectFiles()
314314
public void GenerateFiles_ForSingleClass_Should_GenerateCorrectFiles()
315315
{
316316
// Arrange
317-
var attributeFilename = "ProxyInterfaceGenerator.Extra.g.cs";
318-
var interfaceFilename = "ProxyInterfaceSourceGeneratorTests.Source.IPersonExtends.g.cs";
319-
var proxyClassFilename = "ProxyInterfaceSourceGeneratorTests.Source.PersonExtendsProxy.g.cs";
317+
var fileNames = new[]
318+
{
319+
"ProxyInterfaceGenerator.Extra.g.cs",
320+
"ProxyInterfaceSourceGeneratorTests.Source.IPersonExtends.g.cs",
321+
"ProxyInterfaceSourceGeneratorTests.Source.PersonExtendsProxy.g.cs",
322+
};
320323

321324
var path = Path.Combine(_basePath, "Source", "IPersonExtends.cs");
322325
var sourceFile = new SourceFile
@@ -334,30 +337,7 @@ public void GenerateFiles_ForSingleClass_Should_GenerateCorrectFiles()
334337
var result = _sut.Execute([sourceFile]);
335338

336339
// Assert
337-
result.Valid.Should().BeTrue();
338-
result.Files.Should().HaveCount(3);
339-
340-
// Assert attribute
341-
var attribute = result.Files[0].SyntaxTree;
342-
attribute.FilePath.Should().EndWith(attributeFilename);
343-
344-
// Assert interface
345-
var @interface = result.Files[1].SyntaxTree;
346-
@interface.FilePath.Should().EndWith(interfaceFilename);
347-
348-
var interfaceCode = @interface.ToString();
349-
var interfaceCodeFilename = Path.Combine(_basePath, "Destination", interfaceFilename);
350-
if (Write) File.WriteAllText(interfaceCodeFilename, interfaceCode);
351-
interfaceCode.Should().NotBeNullOrEmpty().And.Be(File.ReadAllText(interfaceCodeFilename));
352-
353-
// Assert Proxy
354-
var proxyClass = result.Files[2].SyntaxTree;
355-
proxyClass.FilePath.Should().EndWith(proxyClassFilename);
356-
357-
var proxyCode = proxyClass.ToString();
358-
var proxyCodeFilename = Path.Combine(_basePath, "Destination", proxyClassFilename);
359-
if (Write) File.WriteAllText(proxyCodeFilename, proxyCode);
360-
proxyCode.Should().NotBeNullOrEmpty().And.Be(File.ReadAllText(proxyCodeFilename));
340+
Assert(result, fileNames, false);
361341
}
362342

363343
[Fact]
@@ -816,14 +796,16 @@ public void GenerateFiles_ForTimeProvider_Should_GenerateCorrectFiles()
816796
Assert(result, fileNames);
817797
}
818798

819-
private void Assert(ExecuteResult result, string[] fileNames)
799+
private void Assert(ExecuteResult result, string[] fileNames, bool skipExtra = true)
820800
{
801+
var skip = skipExtra ? 1 : 0;
802+
821803
result.Valid.Should().BeTrue();
822-
result.Files.Should().HaveCount(fileNames.Length + 1);
804+
result.Files.Should().HaveCount(fileNames.Length + skip);
823805

824806
foreach (var fileName in fileNames.Select((fileName, index) => new { fileName, index }))
825807
{
826-
var builder = result.Files[fileName.index + 1]; // +1 means skip the attribute
808+
var builder = result.Files[fileName.index + skip]; // +1 means skip the attribute
827809
builder.Path.Should().EndWith(fileName.fileName);
828810

829811
var destinationFilename = Path.Combine(_basePath, $"Destination/{fileName.fileName}");

0 commit comments

Comments
 (0)