public static ImmutableArray <IMethodSymbol> MethodAndFullInheritanceChain(this IMethodSymbol method)
 {
     return
         (ImmutableArray.Create(method)
          .AddRange(method.GetBaseMethodsChain())
          .AddRange(method.GetImplementedInterfaceMethods()));
 }
        /// <summary>
        /// Returns the very first virtual/abstract method in the inheritance chain.
        /// </summary>
        public static IMethodSymbol GetBaseMostOverridenMethod(this IMethodSymbol method)
        {
            Contract.Requires(method != null);
            Contract.Requires(method.IsOverride);
            Contract.Ensures(Contract.Result <IMethodSymbol>() != null);

            return(method.GetBaseMethodsChain().Last());
        }