diff --git a/BTDB.SourceGenerator.Test/GeneratorTestsBase.cs b/BTDB.SourceGenerator.Test/GeneratorTestsBase.cs
index 6907f375..1d02a4f2 100644
--- a/BTDB.SourceGenerator.Test/GeneratorTestsBase.cs
+++ b/BTDB.SourceGenerator.Test/GeneratorTestsBase.cs
@@ -31,8 +31,11 @@ protected static Task VerifySourceGenerator(string sourceCode)
// Assert the driver doesn't recompute the output
var result = runResult2.GetRunResult().Results.Single();
var allOutputs = result.TrackedOutputSteps.SelectMany(outputStep => outputStep.Value)
- .SelectMany(output => output.Outputs);
- Assert.Collection(allOutputs, output => Assert.Equal(IncrementalStepRunReason.Cached, output.Reason));
+ .SelectMany(output => output.Outputs).ToList();
+ if (allOutputs.Count != 0)
+ {
+ Assert.Collection(allOutputs, output => Assert.Equal(IncrementalStepRunReason.Cached, output.Reason));
+ }
return Verifier.Verify(runResult);
}
diff --git a/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger.g.verified.cs b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger[int].g.verified.cs
similarity index 94%
rename from BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger.g.verified.cs
rename to BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger[int].g.verified.cs
index 73721b96..41bfdd4e 100644
--- a/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger.g.verified.cs
+++ b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClasses#TestNamespace.Logger[int].g.verified.cs
@@ -1,4 +1,4 @@
-//HintName: TestNamespace.Logger.g.cs
+//HintName: TestNamespace.Logger[int].g.cs
//
#pragma warning disable 612,618
using System;
diff --git a/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[int].g.verified.cs b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[int].g.verified.cs
new file mode 100644
index 00000000..41bfdd4e
--- /dev/null
+++ b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[int].g.verified.cs
@@ -0,0 +1,25 @@
+//HintName: TestNamespace.Logger[int].g.cs
+//
+#pragma warning disable 612,618
+using System;
+using System.Runtime.CompilerServices;
+
+namespace TestNamespace;
+
+static file class LoggerRegistration
+{
+ [ModuleInitializer]
+ internal static unsafe void Register4BTDB()
+ {
+ global::BTDB.IOC.IContainer.RegisterFactory(typeof(global::TestNamespace.Logger), (container, ctx) =>
+ {
+ var f0 = container.CreateFactory(ctx, typeof(int), "a");
+ if (f0 == null) throw new global::System.ArgumentException("Cannot resolve int a parameter of TestNamespace.Logger");
+ return (container2, ctx2) =>
+ {
+ var res = new global::TestNamespace.Logger((int)(f0(container2, ctx2)));
+ return res;
+ };
+ });
+ }
+}
diff --git a/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[string].g.verified.cs b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[string].g.verified.cs
new file mode 100644
index 00000000..4b2b4bd8
--- /dev/null
+++ b/BTDB.SourceGenerator.Test/IOCTests.VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants#TestNamespace.Logger[string].g.verified.cs
@@ -0,0 +1,25 @@
+//HintName: TestNamespace.Logger[string].g.cs
+//
+#pragma warning disable 612,618
+using System;
+using System.Runtime.CompilerServices;
+
+namespace TestNamespace;
+
+static file class LoggerRegistration
+{
+ [ModuleInitializer]
+ internal static unsafe void Register4BTDB()
+ {
+ global::BTDB.IOC.IContainer.RegisterFactory(typeof(global::TestNamespace.Logger), (container, ctx) =>
+ {
+ var f0 = container.CreateFactory(ctx, typeof(string), "a");
+ if (f0 == null) throw new global::System.ArgumentException("Cannot resolve string a parameter of TestNamespace.Logger");
+ return (container2, ctx2) =>
+ {
+ var res = new global::TestNamespace.Logger(Unsafe.As(f0(container2, ctx2)));
+ return res;
+ };
+ });
+ }
+}
diff --git a/BTDB.SourceGenerator.Test/IOCTests.cs b/BTDB.SourceGenerator.Test/IOCTests.cs
index 361957b7..c6d01c88 100644
--- a/BTDB.SourceGenerator.Test/IOCTests.cs
+++ b/BTDB.SourceGenerator.Test/IOCTests.cs
@@ -461,6 +461,28 @@ public Logger(T a)
");
}
+ [Fact]
+ public Task VerifyGenerateForCouldBeUsedForGenericClassesWithMultipleVariants()
+ {
+ // language=cs
+ return VerifySourceGenerator(@"
+ namespace TestNamespace;
+
+ public interface ILogger
+ {
+ }
+
+ [BTDB.GenerateFor(typeof(Logger))]
+ [BTDB.GenerateFor(typeof(Logger))]
+ public class Logger: ILogger
+ {
+ public Logger(T a)
+ {
+ }
+ }
+ ");
+ }
+
[Fact]
public Task VerifyGenerateForCouldBeUsedForChoosingDifferentConstructor()
{
diff --git a/BTDB.SourceGenerator/Main.cs b/BTDB.SourceGenerator/Main.cs
index a6f44368..6e7cfb9c 100644
--- a/BTDB.SourceGenerator/Main.cs
+++ b/BTDB.SourceGenerator/Main.cs
@@ -968,7 +968,7 @@ internal static unsafe void Register4BTDB()
""";
context.AddSource(
- $"{(generationInfo.Namespace == null ? "" : generationInfo.Namespace + ".") + generationInfo.Name}.g.cs",
+ $"{generationInfo.FullName.Replace("global::","").Replace("<","[").Replace(">","]")}.g.cs",
SourceText.From(code, Encoding.UTF8));
}
}