private void DiagnoseFunction(FunctionData functionData) { if (functionData.Conversion != Core.MethodConversion.Ignore || functionData.ExplicitlyIgnored || new[] { IgnoreReason.NeverUsed, IgnoreReason.NoAsyncInvocations, IgnoreReason.AllRelatedMethodsIgnored, IgnoreReason.AlreadyAsync, IgnoreReason.AsyncCounterpartExists }.Contains(functionData.IgnoredReason)) { return; } var asyncInvocations = functionData.BodyFunctionReferences.Where(o => o.ReferenceFunctionData?.Conversion.HasFlag(Core.MethodConversion.ToAsync) == true || GetAsyncCounterparts(o.ReferenceSymbol, _searchOptions).Any()).ToList(); if (asyncInvocations.Count <= 0) { return; } var methodData = functionData.GetMethodOrAccessorData(); if (methodData.IgnoredReason != null) { methodData.SetIgnoreSeverity(DiagnosticSeverity.Warning); } functionData.SetIgnoreSeverity(DiagnosticSeverity.Warning); foreach (var asyncInvocation in asyncInvocations) { asyncInvocation.SetIgnoreSeverity(DiagnosticSeverity.Warning); asyncInvocation.AddDiagnostic("Has an async counterpart that could't been used", DiagnosticSeverity.Warning); } }