protected override IEnumerable <Diagnostic> AnalyzeName(IParameterSymbol symbol) { switch (symbol.Name) { case ExpectedName: case "exception": case "innerException": return(Enumerable.Empty <Diagnostic>()); case "inner": if (symbol.ContainingSymbol.IsConstructor() && symbol.ContainingType.IsException()) { return(Enumerable.Empty <Diagnostic>()); } break; default: if (symbol.ContainingSymbol.IsConstructor() && symbol.MatchesProperty()) { return(Enumerable.Empty <Diagnostic>()); } break; } return(new[] { Issue(symbol, ExpectedName, "exception") }); }