File: Extensions\ReflectionExtensions.cs
Web Access
Project: src\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
 
using System.Globalization;
using System.Linq;
using System.Reflection;
 
namespace System.ServiceModel
{
    internal static class ReflectionExtensions
    {
        #region Type
        public static Assembly Assembly(this Type type)
        {
            return type.GetTypeInfo().Assembly;
        }
        public static Type BaseType(this Type type)
        {
            return type.GetTypeInfo().BaseType;
        }
        public static bool ContainsGenericParameters(this Type type)
        {
            return type.GetTypeInfo().ContainsGenericParameters;
        }
        public static ConstructorInfo GetConstructor(this Type type, Type[] types)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static ConstructorInfo GetConstructor(this Type type, BindingFlags bindingAttr, object binder, Type[] types, object[] modifiers)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static PropertyInfo GetProperty(this Type type, string name, BindingFlags bindingAttr)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static Type[] GetGenericArguments(this Type type)
        {
            return type.GetTypeInfo().GenericTypeArguments;
        }
        public static Type[] GetInterfaces(this Type type)
        {
            return Enumerable.ToArray(type.GetTypeInfo().ImplementedInterfaces);
        }
        public static bool IsAbstract(this Type type)
        {
            return type.GetTypeInfo().IsAbstract;
        }
        public static bool IsAssignableFrom(this Type type, Type otherType)
        {
            return type.GetTypeInfo().IsAssignableFrom(otherType.GetTypeInfo());
        }
        public static bool IsClass(this Type type)
        {
            return type.GetTypeInfo().IsClass;
        }
        public static bool IsDefined(this Type type, Type attributeType, bool inherit)
        {
            return type.GetTypeInfo().IsDefined(attributeType, inherit);
        }
        public static bool IsEnum(this Type type)
        {
            return type.GetTypeInfo().IsEnum;
        }
        public static bool IsGenericType(this Type type)
        {
            return type.GetTypeInfo().IsGenericType;
        }
        public static bool IsInterface(this Type type)
        {
            return type.GetTypeInfo().IsInterface;
        }
        public static bool IsInstanceOfType(this Type type, object o)
        {
            return o == null ? false : type.GetTypeInfo().IsAssignableFrom(o.GetType().GetTypeInfo());
        }
        public static bool IsMarshalByRef(this Type type)
        {
            return type.GetTypeInfo().IsMarshalByRef;
        }
        public static bool IsNotPublic(this Type type)
        {
            return type.GetTypeInfo().IsNotPublic;
        }
        public static bool IsSealed(this Type type)
        {
            return type.GetTypeInfo().IsSealed;
        }
        public static bool IsValueType(this Type type)
        {
            return type.GetTypeInfo().IsValueType;
        }
        public static InterfaceMapping GetInterfaceMap(this Type type, Type interfaceType)
        {
            return type.GetTypeInfo().GetRuntimeInterfaceMap(interfaceType);
        }
        public static MemberInfo[] GetMember(this Type type, string name, BindingFlags bindingAttr)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static MemberInfo[] GetMembers(this Type type, BindingFlags bindingAttr)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static MethodInfo GetMethod(this Type type, string name)
        {
            return type.GetTypeInfo().GetDeclaredMethod(name);
        }
 
        public static MethodInfo GetMethod(this Type type, string name, Type[] types)
        {
            return type.GetRuntimeMethod(name, types);
        }
 
        // TypeCode does not exist in N, but it is used by ServiceModel.
        // This extension method was copied from System.Private.PortableThunks\Internal\PortableLibraryThunks\System\TypeThunks.cs
        public static TypeCode GetTypeCode(this Type type)
        {
            if (type == null)
            {
                return TypeCode.Empty;
            }
 
            if (type == typeof(Boolean))
            {
                return TypeCode.Boolean;
            }
 
            if (type == typeof(Char))
            {
                return TypeCode.Char;
            }
 
            if (type == typeof(SByte))
            {
                return TypeCode.SByte;
            }
 
            if (type == typeof(Byte))
            {
                return TypeCode.Byte;
            }
 
            if (type == typeof(Int16))
            {
                return TypeCode.Int16;
            }
 
            if (type == typeof(UInt16))
            {
                return TypeCode.UInt16;
            }
 
            if (type == typeof(Int32))
            {
                return TypeCode.Int32;
            }
 
            if (type == typeof(UInt32))
            {
                return TypeCode.UInt32;
            }
 
            if (type == typeof(Int64))
            {
                return TypeCode.Int64;
            }
 
            if (type == typeof(UInt64))
            {
                return TypeCode.UInt64;
            }
 
            if (type == typeof(Single))
            {
                return TypeCode.Single;
            }
 
            if (type == typeof(Double))
            {
                return TypeCode.Double;
            }
 
            if (type == typeof(Decimal))
            {
                return TypeCode.Decimal;
            }
 
            if (type == typeof(DateTime))
            {
                return TypeCode.DateTime;
            }
 
            if (type == typeof(String))
            {
                return TypeCode.String;
            }
 
            if (type.GetTypeInfo().IsEnum)
            {
                return GetTypeCode(Enum.GetUnderlyingType(type));
            }
 
            return TypeCode.Object;
        }
        #endregion Type
 
        #region ConstructorInfo
        public static bool IsPublic(this ConstructorInfo ci)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static object Invoke(this ConstructorInfo ci, BindingFlags invokeAttr, object binder, object[] parameters, CultureInfo culture)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        #endregion ConstructorInfo
 
        #region MethodInfo, MethodBase
        public static RuntimeMethodHandle MethodHandle(this MethodBase mb)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static RuntimeMethodHandle MethodHandle(this MethodInfo mi)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        public static Type ReflectedType(this MethodInfo mi)
        {
            throw ExceptionHelper.PlatformNotSupported();
        }
        #endregion MethodInfo, MethodBase
    }
}