5
5
using Microsoft . VisualStudio . Text . Tagging ;
6
6
using FineCodeCoverage . Engine . Model ;
7
7
using System . Linq ;
8
+ using FineCodeCoverage . Core . Utilities ;
8
9
9
10
namespace FineCodeCoverage . Impl
10
11
{
11
- internal class CoverageLineGlyphTagger : ITagger < CoverageLineGlyphTag >
12
+ internal class CoverageLineGlyphTagger : ITagger < CoverageLineGlyphTag > , IListener < NewCoverageLinesMessage >
12
13
{
13
14
private readonly ITextBuffer _textBuffer ;
14
- private readonly IFCCEngine fccEngine ;
15
+ private List < CoverageLine > coverageLines ;
15
16
16
17
public event EventHandler < SnapshotSpanEventArgs > TagsChanged ;
17
18
18
- public CoverageLineGlyphTagger ( ITextBuffer textBuffer , IFCCEngine fccEngine )
19
+ public CoverageLineGlyphTagger ( ITextBuffer textBuffer , List < CoverageLine > lastCoverageLines )
19
20
{
20
21
_textBuffer = textBuffer ;
21
- this . fccEngine = fccEngine ;
22
- fccEngine . UpdateMarginTags += FCCEngine_UpdateMarginTags ;
22
+ coverageLines = lastCoverageLines ;
23
+ if ( lastCoverageLines != null )
24
+ {
25
+ RaiseTagsChanged ( ) ;
26
+ }
23
27
}
24
28
25
- private void FCCEngine_UpdateMarginTags ( UpdateMarginTagsEventArgs e )
29
+ private void RaiseTagsChanged ( )
26
30
{
27
31
var span = new SnapshotSpan ( _textBuffer . CurrentSnapshot , 0 , _textBuffer . CurrentSnapshot . Length ) ;
28
32
var spanEventArgs = new SnapshotSpanEventArgs ( span ) ;
@@ -33,7 +37,7 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
33
37
{
34
38
var result = new List < ITagSpan < CoverageLineGlyphTag > > ( ) ;
35
39
36
- if ( spans == null || fccEngine . CoverageLines == null )
40
+ if ( spans == null || coverageLines == null )
37
41
{
38
42
return result ;
39
43
}
@@ -47,11 +51,11 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
47
51
48
52
var startLineNumber = span . Start . GetContainingLine ( ) . LineNumber + 1 ;
49
53
var endLineNumber = span . End . GetContainingLine ( ) . LineNumber + 1 ;
50
- var coverageLines = GetLines ( document . FilePath , startLineNumber , endLineNumber ) ;
54
+ var applicableCoverageLines = GetApplicableLines ( document . FilePath , startLineNumber , endLineNumber ) ;
51
55
52
- foreach ( var coverageLine in coverageLines )
56
+ foreach ( var applicableCoverageLine in applicableCoverageLines )
53
57
{
54
- var tag = new CoverageLineGlyphTag ( coverageLine ) ;
58
+ var tag = new CoverageLineGlyphTag ( applicableCoverageLine ) ;
55
59
var tagSpan = new TagSpan < CoverageLineGlyphTag > ( span , tag ) ;
56
60
result . Add ( tagSpan ) ;
57
61
}
@@ -60,13 +64,19 @@ IEnumerable<ITagSpan<CoverageLineGlyphTag>> ITagger<CoverageLineGlyphTag>.GetTag
60
64
return result ;
61
65
}
62
66
63
- private IEnumerable < CoverageLine > GetLines ( string filePath , int startLineNumber , int endLineNumber )
67
+ private IEnumerable < CoverageLine > GetApplicableLines ( string filePath , int startLineNumber , int endLineNumber )
64
68
{
65
- return fccEngine . CoverageLines
69
+ return coverageLines
66
70
. AsParallel ( )
67
71
. Where ( x => x . Class . Filename . Equals ( filePath , StringComparison . OrdinalIgnoreCase ) )
68
72
. Where ( x => x . Line . Number >= startLineNumber && x . Line . Number <= endLineNumber )
69
73
. ToArray ( ) ;
70
74
}
71
- }
75
+
76
+ public void Handle ( NewCoverageLinesMessage message )
77
+ {
78
+ coverageLines = message . CoverageLines ;
79
+ RaiseTagsChanged ( ) ;
80
+ }
81
+ }
72
82
}
0 commit comments