private CompetitionTarget TryParseCompetitionTarget(
            Target target, CompetitionMetadata competitionMetadata,
            CompetitionState competitionState)
        {
            var competitionAttribute = target.Method.GetCustomAttribute <CompetitionBenchmarkAttribute>();

            if (competitionAttribute == null)
            {
                return(null);
            }

            var fallbackLimit = CompetitionLimit.Empty;

            CompetitionTarget result;

            if (competitionMetadata == null)
            {
                var limit = TryParseCompetitionLimit(competitionAttribute)
                            ?? fallbackLimit;

                result = new CompetitionTarget(target, limit, competitionAttribute.DoesNotCompete);
            }
            else
            {
                var limit = TryParseCompetitionLimit(target, competitionMetadata, competitionState)
                            ?? fallbackLimit;

                result = new CompetitionTarget(target, limit, competitionAttribute.DoesNotCompete, competitionMetadata);
            }

            return(result);
        }
        private CompetitionLimit TryParseCompetitionLimit(
            Target target,
            CompetitionMetadata competitionMetadata,
            CompetitionState competitionState)
        {
            CompetitionLimit result = null;

            // DONTTOUCH: the doc should be loaded for validation even if IgnoreExistingAnnotations = true
            var resourceKey = new ResourceKey(
                target.Type.Assembly,
                competitionMetadata.MetadataResourceName,
                competitionMetadata.UseFullTypeName);

            var xmlAnnotationDoc = _xmlAnnotationsCache.GetOrAdd(
                resourceKey,
                r => XmlAnnotations.TryParseXmlAnnotationDoc(r.Item1, r.Item2, r.Item3, competitionState));

            if (!IgnoreExistingAnnotations && xmlAnnotationDoc != null)
            {
                var parsedLimit = XmlAnnotations.TryParseCompetitionLimit(
                    target,
                    xmlAnnotationDoc,
                    competitionState);

                if (parsedLimit == null)
                {
                    competitionState.WriteMessage(
                        MessageSource.Analyser, MessageSeverity.Warning,
                        $"No XML annotation for {target.MethodTitle} found. Check if the method was renamed.");
                }
                else
                {
                    result = parsedLimit;
                }
            }

            return(result);
        }