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