Skip to content

Commit a2f5e52

Browse files
authored
Fix for : Same class name in different namespaces (#132)
* Fix For Same Class Name in different NS * Update build
1 parent ddcfa72 commit a2f5e52

File tree

27 files changed

+243
-129
lines changed

27 files changed

+243
-129
lines changed

.github/workflows/ci-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ jobs:
1515
with:
1616
configuration: Release
1717
productNamespacePrefix: "SourceGenerators"
18-
installWorkflows: false
18+
installWorkflows: true

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
with:
1414
configuration: Release
1515
productNamespacePrefix: "SourceGenerators"
16-
installWorkflows: false
16+
installWorkflows: true
1717
secrets:
1818
SIGN_ACCOUNT_NAME: ${{ secrets.SIGN_ACCOUNT_NAME }}
1919
SIGN_PROFILE_NAME: ${{ secrets.SIGN_PROFILE_NAME }}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsPropertyFromObservable.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsProperties.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsProperties.g.cs
22
// <auto-generated/>
33
#pragma warning disable
44
#nullable enable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsProperties.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsProperties.g.cs
22
// <auto-generated/>
33
#pragma warning disable
44
#nullable enable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.ObservableAsProperties.g.cs
1+
//HintName: TestNs.TestVM.ObservableAsProperties.g.cs
22
// <auto-generated/>
33
#pragma warning disable
44
#nullable enable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.Properties.g.cs
1+
//HintName: TestNs.TestVM.Properties.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.Properties.g.cs
1+
//HintName: TestNs.TestVM.Properties.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.Properties.g.cs
1+
//HintName: TestNs.TestVM.Properties.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: TestVM.Properties.g.cs
1+
//HintName: TestNs.TestVM.Properties.g.cs
22
// <auto-generated/>
33
using ReactiveUI;
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//HintName: ReactiveUI.SourceGenerators.AccessModifier.g.cs
2+
// Copyright (c) 2024 .NET Foundation and Contributors. All rights reserved.
3+
// Licensed to the .NET Foundation under one or more agreements.
4+
// The .NET Foundation licenses this file to you under the MIT license.
5+
// See the LICENSE file in the project root for full license information.
6+
7+
// <auto-generated/>
8+
#pragma warning disable
9+
#nullable enable
10+
namespace ReactiveUI.SourceGenerators;
11+
12+
/// <summary>
13+
/// AccessModifier.
14+
/// </summary>
15+
internal enum AccessModifier
16+
{
17+
Public,
18+
Protected,
19+
Internal,
20+
Private,
21+
InternalProtected,
22+
PrivateProtected,
23+
}
24+
25+
/// <summary>
26+
/// InheritanceModifier.
27+
/// </summary>
28+
internal enum InheritanceModifier
29+
{
30+
None,
31+
Virtual,
32+
Override,
33+
New,
34+
}
35+
#nullable restore
36+
#pragma warning restore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//HintName: ReactiveUI.SourceGenerators.ReactiveAttribute.g.cs
2+
// Copyright (c) 2024 .NET Foundation and Contributors. All rights reserved.
3+
// Licensed to the .NET Foundation under one or more agreements.
4+
// The .NET Foundation licenses this file to you under the MIT license.
5+
// See the LICENSE file in the project root for full license information.
6+
7+
using System;
8+
9+
// <auto-generated/>
10+
#pragma warning disable
11+
#nullable enable
12+
namespace ReactiveUI.SourceGenerators;
13+
14+
/// <summary>
15+
/// ReactiveAttribute.
16+
/// </summary>
17+
/// <seealso cref="Attribute" />
18+
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
19+
internal sealed class ReactiveAttribute : Attribute
20+
{
21+
/// <summary>
22+
/// Gets the AccessModifier of the set property.
23+
/// </summary>
24+
/// <value>
25+
/// The AccessModifier of the set property.
26+
/// </value>
27+
public AccessModifier SetModifier { get; init; }
28+
29+
/// <summary>
30+
/// Gets the InheritanceModifier of the property.
31+
/// </sumary>
32+
public InheritanceModifier Inheritance { get; init; }
33+
}
34+
#nullable restore
35+
#pragma warning restore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//HintName: TestNs1.TestVM.Properties.g.cs
2+
// <auto-generated/>
3+
using ReactiveUI;
4+
5+
#pragma warning disable
6+
#nullable enable
7+
8+
namespace TestNs1
9+
{
10+
/// <summary>
11+
/// Partial class for the TestVM which contains ReactiveUI Reactive property initialization.
12+
/// </summary>
13+
public partial class TestVM
14+
{
15+
/// <inheritdoc cref="_name"/>
16+
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
17+
[global::System.Runtime.Serialization.DataMemberAttribute()]
18+
[global::System.Text.Json.Serialization.JsonIncludeAttribute()]
19+
public string? Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); }
20+
}
21+
}
22+
#nullable restore
23+
#pragma warning restore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//HintName: TestNs2.TestVM.Properties.g.cs
2+
// <auto-generated/>
3+
using ReactiveUI;
4+
5+
#pragma warning disable
6+
#nullable enable
7+
8+
namespace TestNs2
9+
{
10+
/// <summary>
11+
/// Partial class for the TestVM which contains ReactiveUI Reactive property initialization.
12+
/// </summary>
13+
public partial class TestVM
14+
{
15+
/// <inheritdoc cref="_name"/>
16+
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
17+
[global::System.Runtime.Serialization.DataMemberAttribute()]
18+
[global::System.Text.Json.Serialization.JsonIncludeAttribute()]
19+
public string? Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); }
20+
}
21+
}
22+
#nullable restore
23+
#pragma warning restore

src/ReactiveUI.SourceGenerator.Tests/TestHelper.cs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ public string VerifiedFilePath()
8484
var name = typeof(T).Name;
8585
return name switch
8686
{
87-
nameof(ReactiveGenerator) => "..\\REACTIVE",
88-
nameof(ReactiveCommandGenerator) => "..\\REACTIVECMD",
89-
nameof(ObservableAsPropertyGenerator) => "..\\OAPH",
90-
nameof(IViewForGenerator) => "..\\IVIEWFOR",
91-
nameof(RoutedControlHostGenerator) => "..\\ROUTEDHOST",
92-
nameof(ViewModelControlHostGenerator) => "..\\CONTROLHOST",
87+
nameof(ReactiveGenerator) => "REACTIVE",
88+
nameof(ReactiveCommandGenerator) => "REACTIVECMD",
89+
nameof(ObservableAsPropertyGenerator) => "OAPH",
90+
nameof(IViewForGenerator) => "IVIEWFOR",
91+
nameof(RoutedControlHostGenerator) => "ROUTEDHOST",
92+
nameof(ViewModelControlHostGenerator) => "CONTROLHOST",
9393
_ => name,
9494
};
9595
}
@@ -127,7 +127,7 @@ public void TestFail(
127127

128128
var utility = new SourceGeneratorUtility(x => testOutput.WriteLine(x));
129129

130-
Assert.Throws<InvalidOperationException>(() => RunGeneratorAndCheck(source));
130+
Assert.Throws<InvalidOperationException>(() => { RunGeneratorAndCheck(source); });
131131
}
132132

133133
/// <summary>
@@ -140,7 +140,7 @@ public void TestFail(
140140
/// </returns>
141141
/// <exception cref="InvalidOperationException">Must have valid compiler instance.</exception>
142142
/// <exception cref="ArgumentNullException">callerType.</exception>
143-
public GeneratorDriver TestPass(
143+
public SettingsTask TestPass(
144144
string source,
145145
bool withPreDiagnosics = false)
146146
{
@@ -165,7 +165,7 @@ public GeneratorDriver TestPass(
165165
/// The generator driver used to run the generator.
166166
/// </returns>
167167
/// <exception cref="InvalidOperationException">Thrown if the compiler instance is not valid or if the compilation fails.</exception>
168-
public GeneratorDriver RunGeneratorAndCheck(
168+
public SettingsTask RunGeneratorAndCheck(
169169
string code,
170170
bool withPreDiagnosics = false,
171171
bool rerunCompilation = true)
@@ -224,10 +224,12 @@ public GeneratorDriver RunGeneratorAndCheck(
224224
throw new InvalidOperationException("Compilation failed due to the above diagnostics.");
225225
}
226226

227-
return rerunDriver;
227+
return VerifyGenerator(rerunDriver);
228228
}
229229

230230
// If rerun is not needed, simply run the generator.
231-
return driver.RunGenerators(compilation);
231+
return VerifyGenerator(driver.RunGenerators(compilation));
232232
}
233+
234+
private SettingsTask VerifyGenerator(GeneratorDriver driver) => Verify(driver).UseDirectory(VerifiedFilePath()).ScrubLinesContaining("[global::System.CodeDom.Compiler.GeneratedCode(\"");
233235
}

src/ReactiveUI.SourceGenerator.Tests/UnitTests/OAPFromObservableGeneratorTests.cs

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// The .NET Foundation licenses this file to you under the MIT license.
44
// See the LICENSE file in the project root for full license information.
55

6-
using Microsoft.CodeAnalysis;
76
using ReactiveUI.SourceGenerators;
87
using Xunit.Abstractions;
98

@@ -38,11 +37,8 @@ public partial class TestVM : ReactiveObject
3837
}
3938
""";
4039

41-
// Act: Initialize the helper and run the generator.
42-
var driver = TestHelper.TestPass(sourceCode);
43-
44-
// Assert: Verify the generated code.
45-
return VerifyGenerator(driver);
40+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
41+
return TestHelper.TestPass(sourceCode);
4642
}
4743

4844
/// <summary>
@@ -68,11 +64,8 @@ public partial class TestVM : ReactiveObject
6864
}
6965
""";
7066

71-
// Act: Initialize the helper and run the generator.
72-
var driver = TestHelper.TestPass(sourceCode);
73-
74-
// Assert: Verify the generated code.
75-
return VerifyGenerator(driver);
67+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
68+
return TestHelper.TestPass(sourceCode);
7669
}
7770

7871
/// <summary>
@@ -98,11 +91,8 @@ public partial class TestVM : ReactiveObject
9891
}
9992
""";
10093

101-
// Act: Initialize the helper and run the generator.
102-
var driver = TestHelper.TestPass(sourceCode);
103-
104-
// Assert: Verify the generated code.
105-
return VerifyGenerator(driver);
94+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
95+
return TestHelper.TestPass(sourceCode);
10696
}
10797

10898
/// <summary>
@@ -128,11 +118,8 @@ public partial class TestVM : ReactiveObject
128118
}
129119
""";
130120

131-
// Act: Initialize the helper and run the generator.
132-
var driver = TestHelper.TestPass(sourceCode);
133-
134-
// Assert: Verify the generated code.
135-
return VerifyGenerator(driver);
121+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
122+
return TestHelper.TestPass(sourceCode);
136123
}
137124

138125
/// <summary>
@@ -162,11 +149,8 @@ public partial class TestVM : ReactiveObject
162149
}
163150
""";
164151

165-
// Act: Initialize the helper and run the generator.
166-
var driver = TestHelper.TestPass(sourceCode);
167-
168-
// Assert: Verify the generated code.
169-
return VerifyGenerator(driver);
152+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
153+
return TestHelper.TestPass(sourceCode);
170154
}
171155

172156
/// <summary>
@@ -196,11 +180,8 @@ public partial class TestVM : ReactiveObject
196180
}
197181
""";
198182

199-
// Act: Initialize the helper and run the generator.
200-
var driver = TestHelper.TestPass(sourceCode);
201-
202-
// Assert: Verify the generated code.
203-
return VerifyGenerator(driver);
183+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
184+
return TestHelper.TestPass(sourceCode);
204185
}
205186

206187
/// <summary>
@@ -230,12 +211,7 @@ public partial class TestVM : ReactiveObject
230211
}
231212
""";
232213

233-
// Act: Initialize the helper and run the generator.
234-
var driver = TestHelper.TestPass(sourceCode);
235-
236-
// Assert: Verify the generated code.
237-
return VerifyGenerator(driver);
214+
// Act: Initialize the helper and run the generator. Assert: Verify the generated code.
215+
return TestHelper.TestPass(sourceCode);
238216
}
239-
240-
private SettingsTask VerifyGenerator(GeneratorDriver driver) => Verify(driver).UseDirectory(TestHelper.VerifiedFilePath()).ScrubLinesContaining("[global::System.CodeDom.Compiler.GeneratedCode(\"");
241217
}

0 commit comments

Comments
 (0)