< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.BuildTools.PrivateServiceContractAnalyzer
Assembly: CoreWCF.BuildTools.Roslyn4.0
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.BuildTools/src/PrivateServiceContractAnalyzer.cs
Line coverage
98%
Covered lines: 51
Uncovered lines: 1
Coverable lines: 52
Total lines: 92
Line coverage: 98%
Branch coverage
75%
Covered branches: 6
Total branches: 8
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%11100%
Initialize(...)100%11100%
ErrorWhenServiceContractIsPrivateInterface(...)75%8895.45%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.BuildTools/src/PrivateServiceContractAnalyzer.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Collections.Generic;
 5using System.Collections.Immutable;
 6using System.Linq;
 7using Microsoft.CodeAnalysis;
 8using Microsoft.CodeAnalysis.CSharp;
 9using Microsoft.CodeAnalysis.CSharp.Syntax;
 10using Microsoft.CodeAnalysis.Diagnostics;
 11
 12namespace CoreWCF.BuildTools;
 13
 14[DiagnosticAnalyzer(LanguageNames.CSharp)]
 15public sealed class PrivateServiceContractAnalyzer : DiagnosticAnalyzer
 16{
 117    private static readonly ImmutableArray<DiagnosticDescriptor> s_supportedDiagnostics =
 118        new[]
 119            {
 120                DiagnosticDescriptors.PrivateServiceContractAnalyzer__03XX.PrivateServiceContract,
 121            }
 122            .ToImmutableArray();
 23
 24    public override void Initialize(AnalysisContext context)
 25    {
 1626        context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDia
 27#if !DEBUG
 1628        context.EnableConcurrentExecution();
 29#endif
 1630        context.RegisterCompilationStartAction(compilationStartContext =>
 1631        {
 1032            bool enableOperationInvokerGenerator = compilationStartContext.Options.AnalyzerConfigOptionsProvider
 1033                .GlobalOptions.TryGetValue("build_property.EnableCoreWCFOperationInvokerGenerator", out string? enableSo
 1034                && enableSourceGenerator == "true";
 1635
 1036            if (!enableOperationInvokerGenerator)
 1637            {
 238                return;
 1639            }
 1640
 841            INamedTypeSymbol? coreWcfServiceContractSymbol = compilationStartContext.Compilation.GetTypeByMetadataName("
 842            INamedTypeSymbol? sSMServiceContractSymbol = compilationStartContext.Compilation.GetTypeByMetadataName("Syst
 843            INamedTypeSymbol? coreWcfOperationContractSymbol = compilationStartContext.Compilation.GetTypeByMetadataName
 844            INamedTypeSymbol? sSMOperationContractSymbol = compilationStartContext.Compilation.GetTypeByMetadataName("Sy
 1645
 846            compilationStartContext.RegisterSyntaxNodeAction(
 847                context => ErrorWhenServiceContractIsPrivateInterface(context, coreWcfServiceContractSymbol, sSMServiceC
 848                SyntaxKind.InvocationExpression);
 2449        });
 1650    }
 51
 52    private void ErrorWhenServiceContractIsPrivateInterface(SyntaxNodeAnalysisContext context, INamedTypeSymbol? coreWcf
 53    {
 854        InvocationExpressionSyntax invocationExpressionSyntax = (InvocationExpressionSyntax)context.Node;
 855        IMethodSymbol? methodSymbol = context.SemanticModel.GetSymbolInfo(invocationExpressionSyntax, context.Cancellati
 856        if (methodSymbol == null)
 57        {
 058            return;
 59        }
 60
 61        IEnumerable<INamedTypeSymbol> serviceContracts;
 862        if (methodSymbol.ContainingType?.TypeKind == TypeKind.Interface)
 63        {
 464            serviceContracts = new[] { methodSymbol.ContainingType };
 65        }
 66        else
 67        {
 468            serviceContracts = from @interface in methodSymbol.ContainingType.AllInterfaces
 469                where @interface.GetOneAttributeOf(coreWcfServiceContractSymbol, sSMServiceContractSymbol) is not null
 470                select @interface;
 71        }
 72
 873        var privateServiceContracts = from @interface in serviceContracts
 874            where @interface.IsPrivate()
 875            select @interface;
 76
 877        var operationContracts = from @interface in privateServiceContracts
 1678            from member in @interface.GetMembers()
 879            let methodMember = member as IMethodSymbol
 880            where methodMember is not null
 881            let operationContractAttribute = methodMember.GetOneAttributeOf(coreWcfOperationContractSymbol, sSMOperation
 882            where operationContractAttribute is not null
 1683            select (@interface, methodMember);
 84
 3285        foreach (var (privateServiceContract, operationContract) in operationContracts)
 86        {
 887            context.ReportDiagnostic(DiagnosticDescriptors.PrivateServiceContractAnalyzer__03XX.PrivateServiceContractEr
 88        }
 889    }
 90
 20691    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => s_supportedDiagnostics;
 92}