private static void ReportParameterCount(ParameterCountInfo <ISymbol> info, [NotNull] string name, int parameterCount) { if (!info.Context.Target.IsSynthesized()) { Diagnostic diagnostic = Diagnostic.Create(ParameterCountRule, info.Context.Target.Locations[0], name, parameterCount, info.MaxParameterCount); info.Context.ReportDiagnostic(diagnostic); } }
private static void AnalyzeProperty(SymbolAnalysisContext context, int maxParameterCount) { var property = (IPropertySymbol)context.Symbol; if (property.IsIndexer && MemberRequiresAnalysis(property, context.CancellationToken)) { var info = new ParameterCountInfo <ImmutableArray <IParameterSymbol> >(context.Wrap(property.Parameters), maxParameterCount); AnalyzeParameters(info, property, "Indexer"); } }
private static void AnalyzeLocalFunction(OperationAnalysisContext context, int maxParameterCount) { var operation = (ILocalFunctionOperation)context.Operation; string memberName = GetMemberName(operation.Symbol); var info = new ParameterCountInfo <ImmutableArray <IParameterSymbol> >(context.Wrap(operation.Symbol.Parameters), maxParameterCount); AnalyzeParameters(info, operation.Symbol, memberName); AnalyzeReturnType(context.Wrap(operation.Symbol.ReturnType), operation.Symbol, memberName); }
private static void AnalyzeDelegate([NotNull] INamedTypeSymbol type, SymbolAnalysisContext context, int maxParameterCount) { IMethodSymbol method = type.DelegateInvokeMethod; if (method != null) { string typeName = $"Delegate '{type.Name}'"; var info = new ParameterCountInfo <ImmutableArray <IParameterSymbol> >(context.Wrap(method.Parameters), maxParameterCount); AnalyzeParameters(info, type, typeName); AnalyzeReturnType(context.Wrap(method.ReturnType), type, typeName); } }
private static void AnalyzeMethod(SymbolAnalysisContext context, int maxParameterCount) { var method = (IMethodSymbol)context.Symbol; if (!method.IsPropertyOrEventAccessor() && MemberRequiresAnalysis(method, context.CancellationToken)) { string memberName = GetMemberName(method); var info = new ParameterCountInfo <ImmutableArray <IParameterSymbol> >(context.Wrap(method.Parameters), maxParameterCount); AnalyzeParameters(info, method, memberName); if (MethodCanReturnValue(method)) { AnalyzeReturnType(context.Wrap(method.ReturnType), method, memberName); } } }
private static void AnalyzeParameters(ParameterCountInfo <ImmutableArray <IParameterSymbol> > info, [NotNull] ISymbol member, [NotNull] string memberName) { ImmutableArray <IParameterSymbol> parameters = info.Context.Target; if (parameters.Length > info.MaxParameterCount) { var memberInfo = new ParameterCountInfo <ISymbol>(info.Context.WithTarget(member), info.MaxParameterCount); ReportParameterCount(memberInfo, memberName, parameters.Length); } foreach (IParameterSymbol parameter in parameters) { if (parameter.Type.IsTupleType || TryGetSystemTupleElementCount(parameter.Type) != null) { ReportTupleParameter(info.Context.WithTarget(parameter), memberName, parameter.Name); } } }