Compare commits

..

No commits in common. 'ff1eb813f0a0fbc04cb2f6bf4869a04dd2259631' and 'e4fed15a2af6d35e887f64126c6f58f43020f241' have entirely different histories.

  1. 1
      Debug.LightweightIocContainer.FactoryGenerator/SampleInstaller.cs
  2. 7
      Debug.LightweightIocContainer.FactoryGenerator/Samples/Interfaces/IOtherSample2.cs
  3. 9
      Debug.LightweightIocContainer.FactoryGenerator/Samples/OtherSample2.cs
  4. 34
      LightweightIocContainer.FactoryGenerator/FactoryGenerator.cs
  5. 2
      LightweightIocContainer.FactoryGenerator/LightweightIocContainer.FactoryGenerator.csproj
  6. 2
      LightweightIocContainer.Validation/LightweightIocContainer.Validation.csproj
  7. 2
      LightweightIocContainer/LightweightIocContainer.csproj

@ -17,6 +17,5 @@ public class SampleInstaller : IIocInstaller
{
registration.Add<ISampleClass, SampleClass>().WithGeneratedFactory<ISampleClassFactory>();
registration.Add<IOtherSample, OtherSample>().WithGeneratedFactory<IGenericSampleFactory<IOtherSample>>();
registration.Add<IOtherSample2, OtherSample2>().WithGeneratedFactory<IGenericSampleFactory<IOtherSample2>>();
}
}

@ -1,7 +0,0 @@
// Author: Simon.Gockner
// Created: 2025-12-05
// Copyright(c) 2025 SimonG. All Rights Reserved.
namespace Debug.LightweightIocContainer.FactoryGenerator.Samples.Interfaces;
public interface IOtherSample2 : IOtherSample;

@ -1,9 +0,0 @@
// Author: Simon.Gockner
// Created: 2025-12-05
// Copyright(c) 2025 SimonG. All Rights Reserved.
using Debug.LightweightIocContainer.FactoryGenerator.Samples.Interfaces;
namespace Debug.LightweightIocContainer.FactoryGenerator.Samples;
public class OtherSample2 : IOtherSample2;

@ -101,9 +101,14 @@ public class FactoryGenerator : IIncrementalGenerator
private void GenerateFactory(SourceProductionContext context, ImmutableArray<ITypeSymbol?> types)
{
foreach (ITypeSymbol typeSymbol in GetDistinctTypes(types))
foreach (ISymbol? symbol in types.Distinct(SymbolEqualityComparer.IncludeNullability))
{
if (symbol is not ITypeSymbol typeSymbol)
continue;
context.AddSource($"Generated{typeSymbol.Name}.g.cs", GenerateFactorySourceCode(typeSymbol));
}
}
private string GenerateBuilderClassSourceCode(string? classNamespace, ImmutableArray<ITypeSymbol?> types)
{
@ -130,8 +135,11 @@ public class FactoryGenerator : IIncrementalGenerator
stringBuilder.AppendLine($"{INDENT}public TFactory Create<TFactory>(IocContainer container)");
stringBuilder.AppendLine($"{INDENT}{{");
foreach (ITypeSymbol type in GetDistinctTypes(types))
foreach (ISymbol? symbol in types.Distinct(SymbolEqualityComparer.IncludeNullability))
{
if (symbol is not ITypeSymbol type)
continue;
stringBuilder.AppendLine($"{INDENT}{INDENT}if (typeof(TFactory) == typeof({GetTypeText(type, false)}))");
stringBuilder.AppendLine($"{INDENT}{INDENT}{{");
stringBuilder.AppendLine($"{INDENT}{INDENT}{INDENT}return (TFactory) (object) new Generated{GetTypeText(type, false)}(container);");
@ -255,27 +263,7 @@ public class FactoryGenerator : IIncrementalGenerator
return stringBuilder.ToString();
}
private IEnumerable<ITypeSymbol> GetDistinctTypes(ImmutableArray<ITypeSymbol?> types)
{
List<ITypeSymbol> distinctTypes = [];
foreach (ITypeSymbol? typeSymbol in types)
{
if (typeSymbol is null)
continue;
if (distinctTypes.Contains(typeSymbol, SymbolEqualityComparer.IncludeNullability))
continue;
if (distinctTypes.Any(t => t.Name == typeSymbol.Name))
continue;
distinctTypes.Add(typeSymbol);
}
return distinctTypes;
}
private string? GetNamespaceOfType(ITypeSymbol typeSymbol) => typeSymbol.ContainingNamespace.IsGlobalNamespace ? null : typeSymbol.ContainingNamespace.ToString();
private string? GetNamespaceOfType(ITypeSymbol s) => s.ContainingNamespace.IsGlobalNamespace ? null : s.ContainingNamespace.ToString();
private List<string?> GetNamespacesOfType(ITypeSymbol typeSymbol)
{
List<string?> namespaces = [];

@ -12,7 +12,7 @@
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<IsRoslynComponent>true</IsRoslynComponent>
<VersionPrefix>5.0.0</VersionPrefix>
<VersionSuffix>beta4</VersionSuffix>
<VersionSuffix>beta3</VersionSuffix>
</PropertyGroup>
<PropertyGroup>

@ -11,7 +11,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<DocumentationFile>LightweightIocContainer.Validation.xml</DocumentationFile>
<VersionPrefix>5.0.0</VersionPrefix>
<VersionSuffix>beta4</VersionSuffix>
<VersionSuffix>beta3</VersionSuffix>
</PropertyGroup>
<PropertyGroup>

@ -11,7 +11,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<DocumentationFile>LightweightIocContainer.xml</DocumentationFile>
<VersionPrefix>5.0.0</VersionPrefix>
<VersionSuffix>beta4</VersionSuffix>
<VersionSuffix>beta3</VersionSuffix>
</PropertyGroup>
<PropertyGroup>

Loading…
Cancel
Save