55using Microsoft . VisualStudio . Text . Tagging ;
66using FineCodeCoverage . Engine . Model ;
77using System . Linq ;
8+ using FineCodeCoverage . Core . Utilities ;
89
910namespace FineCodeCoverage . Impl
1011{
11- internal class CoverageLineGlyphTagger : ITagger < CoverageLineGlyphTag >
12+ internal class CoverageLineGlyphTagger : ITagger < CoverageLineGlyphTag > , IListener < NewCoverageLinesMessage >
1213 {
1314 private readonly ITextBuffer _textBuffer ;
14- private readonly IFCCEngine fccEngine ;
15+ private List < CoverageLine > coverageLines ;
1516
1617 public event EventHandler < SnapshotSpanEventArgs > TagsChanged ;
1718
18- public CoverageLineGlyphTagger ( ITextBuffer textBuffer , IFCCEngine fccEngine )
19+ public CoverageLineGlyphTagger ( ITextBuffer textBuffer , List < CoverageLine > lastCoverageLines )
1920 {
2021 _textBuffer = textBuffer ;
21- this . fccEngine = fccEngine ;
22- fccEngine . UpdateMarginTags += FCCEngine_UpdateMarginTags ;
22+ coverageLines = lastCoverageLines ;
23+ if ( lastCoverageLines != null )
24+ {
25+ RaiseTagsChanged ( ) ;
26+ }
2327 }
2428
25- private void FCCEngine_UpdateMarginTags ( UpdateMarginTagsEventArgs e )
29+ private void RaiseTagsChanged ( )
2630 {
2731 var span = new SnapshotSpan ( _textBuffer . CurrentSnapshot , 0 , _textBuffer . CurrentSnapshot . Length ) ;
2832 var spanEventArgs = new SnapshotSpanEventArgs ( span ) ;
@@ -33,7 +37,7 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
3337 {
3438 var result = new List < ITagSpan < CoverageLineGlyphTag > > ( ) ;
3539
36- if ( spans == null || fccEngine . CoverageLines == null )
40+ if ( spans == null || coverageLines == null )
3741 {
3842 return result ;
3943 }
@@ -47,11 +51,11 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
4751
4852 var startLineNumber = span . Start . GetContainingLine ( ) . LineNumber + 1 ;
4953 var endLineNumber = span . End . GetContainingLine ( ) . LineNumber + 1 ;
50- var coverageLines = GetLines ( document . FilePath , startLineNumber , endLineNumber ) ;
54+ var applicableCoverageLines = GetApplicableLines ( document . FilePath , startLineNumber , endLineNumber ) ;
5155
52- foreach ( var coverageLine in coverageLines )
56+ foreach ( var applicableCoverageLine in applicableCoverageLines )
5357 {
54- var tag = new CoverageLineGlyphTag ( coverageLine ) ;
58+ var tag = new CoverageLineGlyphTag ( applicableCoverageLine ) ;
5559 var tagSpan = new TagSpan < CoverageLineGlyphTag > ( span , tag ) ;
5660 result . Add ( tagSpan ) ;
5761 }
@@ -60,13 +64,19 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
6064 return result ;
6165 }
6266
63- private IEnumerable < CoverageLine > GetLines ( string filePath , int startLineNumber , int endLineNumber )
67+ private IEnumerable < CoverageLine > GetApplicableLines ( string filePath , int startLineNumber , int endLineNumber )
6468 {
65- return fccEngine . CoverageLines
69+ return coverageLines
6670 . AsParallel ( )
6771 . Where ( x => x . Class . Filename . Equals ( filePath , StringComparison . OrdinalIgnoreCase ) )
6872 . Where ( x => x . Line . Number >= startLineNumber && x . Line . Number <= endLineNumber )
6973 . ToArray ( ) ;
7074 }
71- }
75+
76+ public void Handle ( NewCoverageLinesMessage message )
77+ {
78+ coverageLines = message . CoverageLines ;
79+ RaiseTagsChanged ( ) ;
80+ }
81+ }
7282}
0 commit comments