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); }