< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Runtime.Serialization.ReflectionHelper
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Runtime/Serialization/ReflectionHelper.cs
Line coverage
52%
Covered lines: 18
Uncovered lines: 16
Coverable lines: 34
Total lines: 88
Line coverage: 52.9%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
GetPropertyDelegate(...)100%11100%
GetPropertyDelegate(...)100%11100%
SetPropertyDelegate(...)100%110%
CreateStaticMethodCallLambda(...)0%220%
CreateInstanceMethodCallLambda(...)100%22100%
CreateInstanceMethodCallLambda(...)50%2283.33%
CreateVoidInstanceMethodCallWithParamLambda(...)100%110%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Runtime/Serialization/ReflectionHelper.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;
 5using System.Linq.Expressions;
 6using System.Reflection;
 7
 8namespace CoreWCF.Runtime.Serialization
 9{
 10    internal static class ReflectionHelper
 11    {
 12        internal static Func<object, TProp> GetPropertyDelegate<TProp>(Type declaringType, string propertyName)
 13        {
 14            Fx.Assert(declaringType != null, "declaringType can't be null");
 2815            var propertyInfo = declaringType.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | Bin
 16            Fx.Assert(propertyInfo != null, $"Type {declaringType.Name} doesn't have a property called {propertyName}");
 2817            var propertyGetter = propertyInfo.GetGetMethod(nonPublic: true);
 2818            return CreateInstanceMethodCallLambda<TProp>(propertyGetter, declaringType);
 19        }
 20
 21        internal static Func<TInstance, TProp> GetPropertyDelegate<TInstance, TProp>(string propertyName)
 22        {
 223            var propertyInfo = typeof(TInstance).GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public |
 24            Fx.Assert(propertyInfo != null, $"Type {typeof(TInstance).Name} doesn't have a property called {propertyName
 225            var propertyGetter = propertyInfo.GetGetMethod(nonPublic: true);
 226            return CreateInstanceMethodCallLambda<TInstance, TProp>(propertyGetter);
 27        }
 28
 29        internal static Action<object, TProp> SetPropertyDelegate<TProp>(Type declaringType, string propertyName)
 30        {
 31            Fx.Assert(declaringType != null, "declaringType can't be null");
 032            var propertyInfo = declaringType.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | Bin
 33            Fx.Assert(propertyInfo != null, $"Type {declaringType.Name} doesn't have a property called {propertyName}");
 034            var propertySetter = propertyInfo.GetSetMethod(nonPublic: true);
 035            return CreateVoidInstanceMethodCallWithParamLambda<TProp>(propertySetter, declaringType);
 36        }
 37
 38        internal static Func<TParam, TReturn> CreateStaticMethodCallLambda<TParam, TReturn>(MethodInfo methodInfo)
 39        {
 040            var paramExpression = Expression.Parameter(typeof(TParam), "param");
 041            Expression callExpr = Expression.Call(methodInfo, paramExpression);
 042            if (typeof(TReturn) != typeof(object))
 43            {
 044                callExpr = Expression.Convert(callExpr, typeof(TReturn));
 45            }
 46
 047            var lambdaExpr = Expression.Lambda<Func<TParam, TReturn>>(callExpr, paramExpression);
 048            return lambdaExpr.Compile();
 49        }
 50
 51        internal static Func<object, TReturn> CreateInstanceMethodCallLambda<TReturn>(MethodInfo methodInfo, Type instan
 52        {
 2853            var instanceObjParamExpr = Expression.Parameter(typeof(object), "instance");
 2854            var typeInstanceExpr = Expression.Convert(instanceObjParamExpr, instanceType);
 2855            Expression callExpr = Expression.Call(typeInstanceExpr, methodInfo); // No parameters for this method
 2856            if (typeof(TReturn) != typeof(object))
 57            {
 2058                callExpr = Expression.Convert(callExpr, typeof(TReturn));
 59            }
 60
 2861            var lambdaExpr = Expression.Lambda<Func<object, TReturn>>(callExpr, instanceObjParamExpr);
 2862            return lambdaExpr.Compile();
 63        }
 64
 65        internal static Func<TInstance, TReturn> CreateInstanceMethodCallLambda<TInstance, TReturn>(MethodInfo methodInf
 66        {
 267            var instanceParamExpr = Expression.Parameter(typeof(TInstance), "instance");
 268            Expression callExpr = Expression.Call(instanceParamExpr, methodInfo); // No parameters for this method
 269            if (typeof(TReturn) != typeof(object))
 70            {
 071                callExpr = Expression.Convert(callExpr, typeof(TReturn));
 72            }
 73
 274            var lambdaExpr = Expression.Lambda<Func<TInstance, TReturn>>(callExpr, instanceParamExpr);
 275            return lambdaExpr.Compile();
 76        }
 77
 78        internal static Action<object, TParam> CreateVoidInstanceMethodCallWithParamLambda<TParam>(MethodInfo methodInfo
 79        {
 080            var instanceObjParamExpr = Expression.Parameter(typeof(object), "instance");
 081            var typeInstanceExpr = Expression.Convert(instanceObjParamExpr, instanceType);
 082            var firstParamParamExpr = Expression.Parameter(typeof(TParam), "param");
 083            Expression callExpr = Expression.Call(typeInstanceExpr, methodInfo, firstParamParamExpr);
 084            var lambdaExpr = Expression.Lambda<Action<object, TParam>>(callExpr, instanceObjParamExpr, firstParamParamEx
 085            return lambdaExpr.Compile();
 86        }
 87    }
 88}