private static void AnalyzeOverloads(OverloadsInfo info, [NotNull] INamedTypeSymbol activeType) { IEnumerable <IMethodSymbol> overloadsInActiveType = info.MethodGroup.Where(method => !method.IsEqualTo(info.LongestOverload) && method.ContainingType.IsEqualTo(activeType)); foreach (IMethodSymbol overload in overloadsInActiveType) { AnalyzeOverload(info, overload); } }
private static void AnalyzeOverload(OverloadsInfo info, [NotNull] IMethodSymbol overload) { if (!overload.IsOverride && !overload.IsInterfaceImplementation() && !overload.HidesBaseMember(info.Context.CancellationToken)) { CompareOrderOfParameters(overload, info.LongestOverload, info.Context); } var invocationWalker = new MethodInvocationWalker(info.MethodGroup); if (!InvokesAnotherOverload(overload, invocationWalker, info.Context)) { IMethodSymbol methodToReport = overload.PartialImplementationPart ?? overload; info.Context.ReportDiagnostic(Diagnostic.Create(InvokeRule, methodToReport.Locations[0], methodToReport.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat))); } }
private static void AnalyzeMethodGroup([NotNull][ItemNotNull] IReadOnlyCollection <IMethodSymbol> methodGroup, [NotNull] INamedTypeSymbol activeType, SymbolAnalysisContext context) { IMethodSymbol longestOverload = TryGetSingleLongestOverload(methodGroup); if (longestOverload != null) { if (longestOverload.ContainingType.IsEqualTo(activeType) && CanBeMadeVirtual(longestOverload)) { IMethodSymbol methodToReport = longestOverload.PartialImplementationPart ?? longestOverload; context.ReportDiagnostic(Diagnostic.Create(MakeVirtualRule, methodToReport.Locations[0])); } var info = new OverloadsInfo(methodGroup, longestOverload, context); AnalyzeOverloads(info, activeType); } }