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