Skip to content

Commit ee9669f

Browse files
Some fixes to AutoSerializable source generator (#4656)
* Fixes file scope namespace handling Fixes generics handling through globally fully qualifiying types * Fix build warnings
1 parent 50dcf15 commit ee9669f

20 files changed

+374
-113
lines changed

Source/Csla.Generators/cs/AutoImplementProperties/Csla.Generator.AutoImplementProperties.CSharp.Tests/Csla.Generator.AutoImplementProperties.CSharp.Tests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="AwesomeAssertions" Version="8.1.0" />
12-
<PackageReference Include="AwesomeAssertions.Analyzers" Version="0.34.2">
11+
<PackageReference Include="AwesomeAssertions" Version="8.2.0" />
12+
<PackageReference Include="AwesomeAssertions.Analyzers" Version="8.0.0">
1313
<PrivateAssets>all</PrivateAssets>
1414
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1515
</PackageReference>
16-
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.13.0" />
16+
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.14.0" />
1717
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.2" />
1818
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.2" />
1919
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
2020
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
2121
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
22-
<PackageReference Include="Verify.MSTest" Version="29.3.1" />
22+
<PackageReference Include="Verify.MSTest" Version="30.1.0" />
2323
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
2424
<PackageReference Include="coverlet.collector" Version="6.0.4">
2525
<PrivateAssets>all</PrivateAssets>

Source/Csla.Generators/cs/AutoImplementProperties/Csla.Generator.AutoImplementProperties.CSharp.Tests/ModuleInitializer.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Runtime.CompilerServices;
2-
using VerifyTests;
32

43

54
namespace Csla.Generator.Tests

Source/Csla.Generators/cs/AutoSerialization/Csla.Generator.AutoSerialization.CSharp.TestObjects/NestingPOCO.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,25 @@ namespace Csla.Generator.AutoSerialization.CSharp.TestObjects
1717
[AutoSerializable]
1818
public partial class NestingPOCO
1919
{
20-
2120
[AutoSerialized]
2221
private NestedPOCO _poco = new NestedPOCO() { Value = "Hello" };
2322

2423
[AutoSerializable]
2524
protected internal partial class NestedPOCO
2625
{
2726

28-
public string Value { get; set; } = string.Empty;
27+
public string? Value { get; set; } = string.Empty;
2928

3029
}
3130

32-
public string GetValue()
31+
public string? GetValue()
3332
{
3433
return _poco.Value;
3534
}
3635

37-
public void SetValue(string value)
36+
public void SetValue(string? value)
3837
{
3938
_poco.Value = value;
4039
}
41-
4240
}
43-
}
41+
}

Source/Csla.Generators/cs/AutoSerialization/Csla.Generator.AutoSerialization.CSharp.TestObjects/NestingPOCO2.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ public partial class NestingPOCO2
2626
protected internal partial class NestedPOCO
2727
{
2828

29-
public string Value { get; set; } = string.Empty;
29+
public string? Value { get; set; } = string.Empty;
3030

3131
}
3232

33-
public string GetValue()
33+
public string? GetValue()
3434
{
3535
return _poco.Value;
3636
}
3737

38-
public void SetValue(string value)
38+
public void SetValue(string? value)
3939
{
4040
_poco.Value = value;
4141
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using Csla.Generator.AutoSerialization.CSharp.AutoSerialization;
2+
using Csla.Generator.Tests;
3+
4+
namespace Csla.Generator.AutoSerialization.CSharp.Tests;
5+
6+
[TestClass]
7+
public class AutoSerializationGeneratorTests : VerifyBase
8+
{
9+
[TestMethod("User class uses file scoped namespace which should be possible to use.")]
10+
public async Task Case01()
11+
{
12+
var source = """
13+
namespace Test;
14+
15+
[Csla.Serialization.AutoSerializable]
16+
public partial class AutoSerializableTest
17+
{
18+
public string Name { get; private set; } = "";
19+
}
20+
21+
""";
22+
23+
await TestHelperVerify(source);
24+
}
25+
26+
[TestMethod("User class uses non file scoped namespace which should be possible to use.")]
27+
public async Task Case02()
28+
{
29+
var source = """
30+
namespace Test
31+
{
32+
[Csla.Serialization.AutoSerializable]
33+
public partial class AutoSerializableTest
34+
{
35+
public string Name { get; private set; } = "";
36+
}
37+
}
38+
""";
39+
40+
await TestHelperVerify(source);
41+
}
42+
43+
[TestMethod("Property with a type containing generics must be generated correctly to be used.")]
44+
public async Task Case03()
45+
{
46+
var additionalSources = """
47+
namespace Test2;
48+
49+
public class Foo<T>;
50+
51+
""";
52+
53+
var source = """
54+
using Csla.Core;
55+
using Test2;
56+
57+
namespace Test
58+
{
59+
[Csla.Serialization.AutoSerializable]
60+
public partial class AutoSerializableTest
61+
{
62+
public string? Name { get; set; } = "";
63+
64+
public MobileDictionary<string, Foo<Foo<AutoSerializableTest>>>? Name2 { get; private set; }
65+
}
66+
}
67+
""";
68+
69+
await TestHelperVerify(source, additionalSources);
70+
}
71+
72+
73+
74+
private static async Task TestHelperVerify(string source, params string[]? additionalSources)
75+
{
76+
await TestHelper<IncrementalSerializationPartialsGenerator>.Verify(source, additionalSources);
77+
}
78+
}
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,41 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFrameworks>net8.0</TargetFrameworks>
5-
<LangVersion>latest</LangVersion>
5+
<LangVersion>preview</LangVersion>
66
<IsPackable>false</IsPackable>
7+
<Nullable>enable</Nullable>
78
</PropertyGroup>
89

910
<ItemGroup>
10-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
11-
<PackageReference Include="MSTest.TestAdapter" Version="3.3.1" />
12-
<PackageReference Include="MSTest.TestFramework" Version="3.3.1" />
11+
<Compile Include="..\..\AutoImplementProperties\Csla.Generator.AutoImplementProperties.CSharp.Tests\ModuleInitializer.cs" Link="ModuleInitializer.cs" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
16+
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
17+
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
1318
<PackageReference Include="coverlet.collector" Version="6.0.4">
1419
<PrivateAssets>all</PrivateAssets>
1520
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1621
</PackageReference>
22+
<PackageReference Include="AwesomeAssertions" Version="8.2.0" />
23+
<PackageReference Include="AwesomeAssertions.Analyzers" Version="8.0.0">
24+
<PrivateAssets>all</PrivateAssets>
25+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
26+
</PackageReference>
27+
<PackageReference Include="Verify.MSTest" Version="30.1.0" />
28+
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
29+
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.14.0" />
30+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.2" />
31+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.2" />
1732
</ItemGroup>
1833

1934
<ItemGroup>
2035
<ProjectReference Include="..\..\..\..\Csla.TestHelpers\Csla.TestHelpers.csproj" />
36+
<ProjectReference Include="..\Csla.Generator.AutoSerialization.Attributes.CSharp\Csla.Generator.AutoSerialization.Attributes.CSharp.csproj" />
2137
<ProjectReference Include="..\Csla.Generator.AutoSerialization.CSharp.TestObjects\Csla.Generator.AutoSerialization.CSharp.TestObjects.csproj" />
38+
<ProjectReference Include="..\Csla.Generator.AutoSerialization.CSharp\Csla.Generator.AutoSerialization.CSharp.csproj" OutputItemType="Analyzer" />
2239
</ItemGroup>
2340

2441
</Project>

Source/Csla.Generators/cs/AutoSerialization/Csla.Generator.AutoSerialization.CSharp.Tests/NestingPOCO2Tests.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,8 @@
55
// </copyright>
66
// <summary>Tests of serialization behaviour on the AutoSerializable class NestingPOCO2</summary>
77
//-----------------------------------------------------------------------
8-
using System;
9-
using System.Collections.Generic;
10-
using System.Text;
11-
using Csla.Serialization.Mobile;
12-
using Microsoft.VisualStudio.TestTools.UnitTesting;
138
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
14-
using Microsoft.Extensions.DependencyInjection;
15-
using Csla.Configuration;
9+
using Csla.Serialization.Mobile;
1610
using Csla.TestHelpers;
1711

1812
namespace Csla.Generator.AutoSerialization.CSharp.Tests
@@ -24,7 +18,7 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
2418
[TestClass]
2519
public class NestingPOCO2Tests
2620
{
27-
private static TestDIContext _testDIContext;
21+
private static TestDIContext _testDIContext = default!;
2822

2923
[ClassInitialize]
3024
public static void ClassInitialize(TestContext testContext)
@@ -39,7 +33,7 @@ public void SerializeThenDeserialize_NestingPOCO2WithValueOfTesty2_HasValueOfTes
3933
{
4034

4135
// Arrange
42-
string actual;
36+
string? actual;
4337
string expected = "Testy2";
4438
NestingPOCO2 poco = new NestingPOCO2();
4539
poco.SetValue("Testy2");
@@ -59,7 +53,7 @@ public void SerializeThenDeserialize_NestingPOCO2WithNullValue_HasNullValue()
5953
{
6054

6155
// Arrange
62-
string actual;
56+
string? actual;
6357
NestingPOCO2 poco = new NestingPOCO2();
6458
poco.SetValue(null);
6559
NestingPOCO2 deserializedPOCO;
@@ -90,7 +84,7 @@ private NestingPOCO2 SerializeThenDeserialiseNestingPOCO2(NestingPOCO2 valueToSe
9084
{
9185
formatter.Serialize(serializationStream, valueToSerialize);
9286
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
93-
deserializedValue = formatter.Deserialize(serializationStream) as NestingPOCO2;
87+
deserializedValue = (NestingPOCO2)formatter.Deserialize(serializationStream);
9488
}
9589

9690
return deserializedValue;

Source/Csla.Generators/cs/AutoSerialization/Csla.Generator.AutoSerialization.CSharp.Tests/NestingPOCOTests.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,8 @@
55
// </copyright>
66
// <summary>Tests of serialization behaviour on the AutoSerializable class NestingPOCO</summary>
77
//-----------------------------------------------------------------------
8-
using System;
9-
using System.Collections.Generic;
10-
using System.Text;
11-
using Csla.Serialization.Mobile;
12-
using Microsoft.VisualStudio.TestTools.UnitTesting;
138
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
14-
using Microsoft.Extensions.DependencyInjection;
15-
using Csla.Configuration;
9+
using Csla.Serialization.Mobile;
1610
using Csla.TestHelpers;
1711

1812
namespace Csla.Generator.AutoSerialization.CSharp.Tests
@@ -24,7 +18,7 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
2418
[TestClass]
2519
public class NestingPOCOTests
2620
{
27-
private static TestDIContext _testDIContext;
21+
private static TestDIContext _testDIContext = default!;
2822

2923
[ClassInitialize]
3024
public static void ClassInitialize(TestContext testContext)
@@ -39,7 +33,7 @@ public void SerializeThenDeserialize_NestingPOCOWithValueOfTesty_HasValueOfTesty
3933
{
4034

4135
// Arrange
42-
string actual;
36+
string? actual;
4337
string expected = "Testy";
4438
NestingPOCO poco = new NestingPOCO();
4539
poco.SetValue("Testy");
@@ -59,7 +53,7 @@ public void SerializeThenDeserialize_NestingPOCOWithNullValue_HasNullValue()
5953
{
6054

6155
// Arrange
62-
string actual;
56+
string? actual;
6357
NestingPOCO poco = new NestingPOCO();
6458
poco.SetValue(null);
6559
NestingPOCO deserializedPOCO;
@@ -90,7 +84,7 @@ private NestingPOCO SerializeThenDeserialiseNestingPOCO(NestingPOCO valueToSeria
9084
{
9185
formatter.Serialize(serializationStream, valueToSerialize);
9286
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
93-
deserializedValue = formatter.Deserialize(serializationStream) as NestingPOCO;
87+
deserializedValue = (NestingPOCO)formatter.Deserialize(serializationStream);
9488
}
9589

9690
return deserializedValue;

Source/Csla.Generators/cs/AutoSerialization/Csla.Generator.AutoSerialization.CSharp.Tests/PersonPOCOTests.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,9 @@
55
// </copyright>
66
// <summary>Tests of serialization behaviour on the AutoSerializable class PersonPOCO</summary>
77
//-----------------------------------------------------------------------
8-
using Csla.Serialization.Mobile;
9-
using Csla.Serialization;
10-
using Microsoft.VisualStudio.TestTools.UnitTesting;
11-
using System;
128
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
139
using Csla.Generator.AutoSerialization.CSharp.Tests.Helpers;
14-
using Microsoft.Extensions.DependencyInjection;
15-
using Csla.Configuration;
10+
using Csla.Serialization.Mobile;
1611
using Csla.TestHelpers;
1712

1813
namespace Csla.Generator.AutoSerialization.CSharp.Tests
@@ -21,10 +16,10 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
2116
/// <summary>
2217
/// Tests of serialization on the PersonPOCO class and its children
2318
/// </summary>
24-
[TestClass]
19+
[TestClass]
2520
public class PersonPOCOTests
2621
{
27-
private static TestDIContext _testDIContext;
22+
private static TestDIContext _testDIContext = default!;
2823

2924
[ClassInitialize]
3025
public static void ClassInitialize(TestContext testContext)
@@ -571,7 +566,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddress1HighStreet_HasA
571566
{
572567

573568
// Arrange
574-
string actual;
569+
string? actual;
575570
string expected = "1 High Street";
576571
PersonPOCO person = new PersonPOCO();
577572
person.Address = new AddressPOCO() { AddressLine1 = "1 High Street" };
@@ -591,7 +586,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddressNull_HasNullAddr
591586
{
592587

593588
// Arrange
594-
AddressPOCO actual;
589+
AddressPOCO? actual;
595590
PersonPOCO person = new PersonPOCO();
596591
PersonPOCO deserializedPerson;
597592

@@ -609,7 +604,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddressTownsville_HasAd
609604
{
610605

611606
// Arrange
612-
string actual;
607+
string? actual;
613608
string expected = "Townsville";
614609
PersonPOCO person = new PersonPOCO();
615610
person.Address = new AddressPOCO() { Town = "Townsville" };
@@ -629,7 +624,7 @@ public void SerializeThenDeserialize_WithIMobileObjectEmailAddressNull_HasEmailA
629624
{
630625

631626
// Arrange
632-
EmailAddress actual;
627+
EmailAddress? actual;
633628
PersonPOCO person = new PersonPOCO();
634629
PersonPOCO deserializedPerson;
635630

@@ -647,7 +642,7 @@ public void SerializeThenDeserialize_WithIMobileObjectEmailAddressAatBdotCom_Has
647642
{
648643

649644
// Arrange
650-
string actual;
645+
string? actual;
651646
string expected = "[email protected]";
652647
PersonPOCO person = new PersonPOCO();
653648
person.EmailAddress = new EmailAddress() { Email = "[email protected]" };
@@ -685,7 +680,7 @@ private PersonPOCO SerializeThenDeserialisePersonPOCO(PersonPOCO valueToSerializ
685680
{
686681
formatter.Serialize(serializationStream, valueToSerialize);
687682
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
688-
deserializedValue = formatter.Deserialize(serializationStream) as PersonPOCO;
683+
deserializedValue = (PersonPOCO)formatter.Deserialize(serializationStream);
689684
}
690685

691686
return deserializedValue;

0 commit comments

Comments
 (0)