/// <summary>
        /// Gets <paramref name="typeParameterSymbol"/> and its all constraint types.
        /// </summary>
        /// <param name="typeParameterSymbol">The typeParameterSymbol to act on.</param>
        /// <param name="includeInterfaces">(Optional) True to include, false to exclude the interfaces.</param>
        /// <returns/>
        public static IEnumerable <ITypeSymbol> GetTypeWithAllConstraintTypes(this ITypeParameterSymbol typeParameterSymbol,
                                                                              bool includeInterfaces = true)
        {
            var constraintTypes = typeParameterSymbol.GetAllConstraintTypes(includeInterfaces);

            return(typeParameterSymbol.ToEnumerable()
                   .Concat(constraintTypes));
        }