Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions src/Pure.DI.Core/Core/Code/CompositionBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,6 @@ public CompositionCode Build(DependencyGraph graph)
break;
}

if (root.Source.Kind.HasFlag(RootKinds.Light))
{
var lightweightRoot = root with
{
Lines = new Lines(),
TypeDescription = typeResolver.Resolve(graph.Source, root.Injection.Type)
};

roots.Add(lightweightRoot);
continue;
}

var lines = new Lines();
using var rootToken = varsMap.Root(lines);
var ctx = new RootContext(graph, root, varsMap, lines);
Expand Down Expand Up @@ -96,6 +84,11 @@ public CompositionCode Build(DependencyGraph graph)
IsMethod = isMethod
};

if (processedRoot.Kind.HasFlag(RootKinds.Light) && typeDescription.TypeArgs.Count > 0)
{
processedRoot = processedRoot with { Kind = processedRoot.Kind & ~RootKinds.Light };
}

roots.Add(processedRoot);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ class LightweightRootClassBuilder(

public CompositionCode Build(CompositionCode composition)
{
var roots = composition.PublicRoots.Where(i => i.Kind.HasFlag(RootKinds.Light)).ToList();
var roots = composition.PublicRoots
.Where(i => i.Kind.HasFlag(RootKinds.Light))
.ToList();
if (roots.Count == 0)
{
return composition;
Expand All @@ -32,4 +34,4 @@ public CompositionCode Build(CompositionCode composition)

return composition with { MembersCount = membersCount };
}
}
}
15 changes: 12 additions & 3 deletions src/Pure.DI.Core/Core/Code/Parts/RootMethodsBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,19 @@ private void BuildRoot(CompositionCode composition, Root root)
else
{
Lines lines;
if (root.Source.Kind.HasFlag(RootKinds.Light))
if (root.Kind.HasFlag(RootKinds.Light))
{
lines = new Lines();
lines.AppendLine($"return {Names.LightweightRootName}.{root.Source.UniqueName}();");
var compositionTypeName = composition.Source.Source.Name.ClassName;
var compositionInstance = root.IsStatic ? $"new {compositionTypeName}()." : string.Empty;
if (root.RootArgs.IsEmpty)
{
lines.AppendLine($"return {compositionInstance}{Names.LightweightRootName}.{root.Source.UniqueName}();");
}
else
{
lines.AppendLine($"return {compositionInstance}{Names.LightweightRootName}({string.Join(", ", root.RootArgs.Select(i => i.Name))}).{root.Source.UniqueName}();");
}
}
else
{
Expand Down Expand Up @@ -204,4 +213,4 @@ private void BuildRoot(CompositionCode composition, Root root)
code.AppendLine("#pragma warning restore CS0162");
}
}
}
}
5 changes: 3 additions & 2 deletions src/Pure.DI.Core/Core/DependencyGraphBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ public IEnumerable<DependencyNode> Build(GraphBuildContext ctx)
}
else
{
if (node.Root.Source.Kind.HasFlag(RootKinds.Light))
if (node.Root.Source.Kind.HasFlag(RootKinds.Light)
&& node.Root.Source.RootType is not INamedTypeSymbol { IsGenericType: true })
{
processed.Add(processingNode);
}
Expand Down Expand Up @@ -562,4 +563,4 @@ private IProcessingNode CreateNewProcessingNode(ICache<ProcessingNodeKey, IProce

private static object? GetContextTag(Injection injection, DependencyNode node) =>
node.Factory is { Source.HasContextTag: true } ? injection.Tag : null;
}
}
5 changes: 3 additions & 2 deletions src/Pure.DI.Core/Core/RootDependencyNodeBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public IEnumerable<DependencyNode> Build(DependencyNodeBuildContext ctx)

// ReSharper disable once InvertIf
if (setup.Kind == CompositionKind.Public
&& roots.Any(i => i.Kind.HasFlag(RootKinds.Light))
&& roots.Any(i => i.Kind.HasFlag(RootKinds.Light)
&& i.RootType is not INamedTypeSymbol { IsGenericType: true })
&& types.TryGet(SpecialType.LightweightRoot, setup.SemanticModel.Compilation) is {} rootType)
{
var root = new MdRoot(
Expand Down Expand Up @@ -79,4 +80,4 @@ public IEnumerable<DependencyNode> Build(DependencyNodeBuildContext ctx)
locationProvider));
}
}
}
}
Loading
Loading