public static ITypeReference UnWrap()

in src/lib/Microsoft.Fx.Portability.Cci/TypeExtensions.cs [462:498]


        public static ITypeReference UnWrap(this ITypeReference reference)
        {
            if (reference is IPointerTypeReference pointer)
            {
                return pointer.TargetType.UnWrap();
            }

            if (reference is IArrayTypeReference array)
            {
                return array.ElementType.UnWrap();
            }

            if (reference is IModifiedTypeReference modified)
            {
                return modified.UnmodifiedType.UnWrap();
            }

            if (reference is ISpecializedNestedTypeReference specialized)
            {
                return specialized.UnspecializedVersion.UnWrap();
            }

            if (reference is IGenericTypeInstanceReference instantiation)
            {
                return instantiation.GenericType.UnWrap();
            }

            Contract.Assert(reference is INamedTypeReference
                || reference is INestedTypeReference
                || reference is INamespaceTypeReference
                || reference is IGenericTypeParameterReference
                || reference is IGenericMethodParameterReference
                || reference is IFunctionPointerTypeReference,
                string.Format(CultureInfo.CurrentCulture, LocalizedStrings.UnexpectedTypeReference, reference?.GetType()?.FullName ?? "null"));

            return reference;
        }