// ReSharper disable once SuggestBaseTypeForParameter private bool TryFillCompetitionTargetsFromLog( CompetitionTargets competitionTargets, XDocument[] xmlAnnotationDocs, CompetitionState competitionState) { competitionState.Logger.WriteLineInfo( $"{LogVerbosePrefix} Parsing XML annotations ({xmlAnnotationDocs.Length} doc(s)) from log '{PreviousRunLogUri}'."); bool updated = false; foreach (var competitionTarget in competitionTargets.Values) { bool hasAnnotations = false; foreach (var doc in xmlAnnotationDocs) { var parsedLimit = XmlAnnotations.TryParseCompetitionLimit(competitionTarget.Target, doc, competitionState); if (parsedLimit != null) { hasAnnotations = true; updated |= competitionTarget.UnionWith(parsedLimit); } } if (!hasAnnotations) { competitionState.WriteMessage( MessageSource.Analyser, MessageSeverity.Warning, $"No logged XML annotation for {competitionTarget.Target.MethodTitle} found. Check if the method was renamed."); } } return(updated); }
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); }