private static bool IsExcludedFromCodeCoverage(MethodSymbol method)
        {
            var containingType = method.ContainingType;

            while ((object)containingType != null)
            {
                if (containingType.IsDirectlyExcludedFromCodeCoverage)
                {
                    return(true);
                }

                containingType = containingType.ContainingType;
            }

            // Skip lambdas and local functions. They can't have custom attributes.
            var nonLambda = method.ContainingNonLambdaMember();

            if (nonLambda?.Kind == SymbolKind.Method)
            {
                method = (MethodSymbol)nonLambda;

                if (method.IsDirectlyExcludedFromCodeCoverage)
                {
                    return(true);
                }

                var associatedSymbol = method.AssociatedSymbol;
                switch (associatedSymbol?.Kind)
                {
                case SymbolKind.Property:
                    if (((PropertySymbol)associatedSymbol).IsDirectlyExcludedFromCodeCoverage)
                    {
                        return(true);
                    }
                    break;

                case SymbolKind.Event:
                    if (((EventSymbol)associatedSymbol).IsDirectlyExcludedFromCodeCoverage)
                    {
                        return(true);
                    }
                    break;
                }
            }

            return(false);
        }