Skip to content

Commit a2b0c6e

Browse files
committed
Fix source generator for class with parameterless private constructor.
1 parent 0c73a20 commit a2b0c6e

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

BTDB.SourceGenerator.Sample/Examples.cs

-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414
h(container, "Hello");
1515
}
1616

17-
[GenerateFor(typeof(HttpContextAccessor))]
18-
interface xxx
19-
{
20-
}
21-
2217
[Generate]
2318
public class DynamicEventWrapper
2419
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//HintName: Logger.g.cs
2+
// <auto-generated/>
3+
#pragma warning disable 612,618
4+
using System;
5+
using System.Runtime.CompilerServices;
6+
7+
[CompilerGenerated]
8+
static file class LoggerRegistration
9+
{
10+
[UnsafeAccessor(UnsafeAccessorKind.Constructor)]
11+
extern static global::Logger Constr();
12+
[ModuleInitializer]
13+
internal static unsafe void Register4BTDB()
14+
{
15+
global::BTDB.IOC.IContainer.RegisterFactory(typeof(global::Logger), (container, ctx) =>
16+
{
17+
return (container2, ctx2) =>
18+
{
19+
var res = Constr();
20+
return res;
21+
};
22+
});
23+
}
24+
}

BTDB.SourceGenerator.Test/IOCTests.cs

+15
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,21 @@ private ErrorHandler(ILogger logger)
230230
""");
231231
}
232232

233+
[Fact]
234+
public Task VerifyIocRegistrationForParameterlessPrivateConstructor()
235+
{
236+
// language=cs
237+
return VerifySourceGenerator("""
238+
[BTDB.Generate]
239+
public class Logger
240+
{
241+
private Logger()
242+
{
243+
}
244+
}
245+
""");
246+
}
247+
233248
[Fact]
234249
public Task VerifyIocRegistrationForDependencyProperties()
235250
{

BTDB.SourceGenerator/Main.cs

+1
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
286286
if (symbolConstructor.Parameters.Length == 0)
287287
{
288288
hasDefaultConstructor = true;
289+
constructor ??= symbolConstructor;
289290
}
290291

291292
if (symbolConstructor.Parameters.Length > (constructor?.Parameters.Length ?? 0))

0 commit comments

Comments
 (0)