< Summary

Information
Class: NexusLabs.Needlr.Generators.Models.DiscoveredProvider
Assembly: NexusLabs.Needlr.Generators
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Generators/Models/Providers/DiscoveredProvider.cs
Line coverage
84%
Covered lines: 22
Uncovered lines: 4
Coverable lines: 26
Total lines: 86
Line coverage: 84.6%
Branch coverage
55%
Covered branches: 10
Total branches: 18
Branch coverage: 55.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_TypeName()100%11100%
get_AssemblyName()100%210%
get_IsInterface()100%11100%
get_IsPartial()100%11100%
get_Properties()100%11100%
get_SourceFilePath()100%11100%
get_SimpleTypeName()50%22100%
get_ImplementationTypeName()50%9875%
get_InterfaceTypeName()62.5%10866.66%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Generators/Models/Providers/DiscoveredProvider.cs

#LineLine coverage
 1using System.Collections.Generic;
 2
 3namespace NexusLabs.Needlr.Generators.Models;
 4
 5/// <summary>
 6/// Information about a discovered Provider (from [Provider] attribute).
 7/// </summary>
 8internal readonly struct DiscoveredProvider
 9{
 10    public DiscoveredProvider(
 11        string typeName,
 12        string assemblyName,
 13        bool isInterface,
 14        bool isPartial,
 15        IReadOnlyList<ProviderPropertyInfo> properties,
 16        string? sourceFilePath = null)
 17    {
 1818        TypeName = typeName;
 1819        AssemblyName = assemblyName;
 1820        IsInterface = isInterface;
 1821        IsPartial = isPartial;
 1822        Properties = properties;
 1823        SourceFilePath = sourceFilePath;
 1824    }
 25
 26    /// <summary>Fully qualified type name of the interface or class.</summary>
 13227    public string TypeName { get; }
 28
 029    public string AssemblyName { get; }
 30
 31    /// <summary>True if the [Provider] attribute is on an interface.</summary>
 9032    public bool IsInterface { get; }
 33
 34    /// <summary>True if the type is a partial class (required for shorthand mode).</summary>
 1235    public bool IsPartial { get; }
 36
 37    /// <summary>Properties to generate on the provider.</summary>
 4238    public IReadOnlyList<ProviderPropertyInfo> Properties { get; }
 39
 3640    public string? SourceFilePath { get; }
 41
 42    /// <summary>Gets simple type name without namespace (e.g., "IOrderProvider" from "global::TestApp.IOrderProvider").
 43    public string SimpleTypeName
 44    {
 45        get
 46        {
 7247            var name = TypeName;
 7248            var lastDot = name.LastIndexOf('.');
 7249            return lastDot >= 0 ? name.Substring(lastDot + 1) : name;
 50        }
 51    }
 52
 53    /// <summary>Gets the implementation class name (removes leading "I" from interface name if present).</summary>
 54    public string ImplementationTypeName
 55    {
 56        get
 57        {
 2458            var simple = SimpleTypeName;
 2459            if (IsInterface && simple.StartsWith("I") && simple.Length > 1 && char.IsUpper(simple[1]))
 60            {
 2461                return simple.Substring(1);
 62            }
 063            return simple;
 64        }
 65    }
 66
 67    /// <summary>Gets the interface name (adds leading "I" to class name if needed).</summary>
 68    public string InterfaceTypeName
 69    {
 70        get
 71        {
 1272            var simple = SimpleTypeName;
 73            // For non-interfaces, add "I" prefix unless the name already follows interface naming convention (IXxx)
 1274            if (!IsInterface)
 75            {
 76                // Only treat as already having interface prefix if it starts with "I" followed by uppercase letter
 1277                if (simple.Length > 1 && simple[0] == 'I' && char.IsUpper(simple[1]))
 78                {
 079                    return simple;
 80                }
 1281                return "I" + simple;
 82            }
 083            return simple;
 84        }
 85    }
 86}