@@ -47,17 +47,18 @@ private ICoverageContentType GetCoverageContentType(ITextSnapshot textSnapshot)
4747 private IFileCodeSpanRangeService GetFileCodeSpanRangeServiceForChanges ( ICoverageContentType coverageContentType )
4848 => coverageContentType . UseFileCodeSpanRangeServiceForChanges ? coverageContentType . FileCodeSpanRangeService : null ;
4949
50+ private INewCodeTracker GetNewCodeTrackerIfProvidesLineExcluder ( ILineExcluder lineExcluder )
51+ => lineExcluder == null ? null : this . newCodeTrackerFactory . Create ( lineExcluder ) ;
52+
5053 public ITrackedLines Create ( List < ILine > lines , ITextSnapshot textSnapshot )
5154 {
5255 ICoverageContentType coverageContentType = this . GetCoverageContentType ( textSnapshot ) ;
5356 IFileCodeSpanRangeService fileCodeSpanRangeService = coverageContentType . FileCodeSpanRangeService ;
5457 List < IContainingCodeTracker > containingCodeTrackers = this . CreateContainingCodeTrackers (
5558 lines , textSnapshot , fileCodeSpanRangeService , coverageContentType . CoverageOnlyFromFileCodeSpanRangeService ) ;
56- ILineExcluder lineExcluder = coverageContentType . LineExcluder ;
57- INewCodeTracker newCodeTracker = lineExcluder == null ? null : this . newCodeTrackerFactory . Create ( lineExcluder ) ;
5859 return this . containingCodeTrackedLinesFactory . Create (
5960 containingCodeTrackers ,
60- newCodeTracker ,
61+ this . GetNewCodeTrackerIfProvidesLineExcluder ( coverageContentType . LineExcluder ) ,
6162 this . GetFileCodeSpanRangeServiceForChanges ( coverageContentType ) ) ;
6263 }
6364
@@ -105,10 +106,12 @@ bool coverageOnlyFromFileCodeSpanRangeService
105106 )
106107 {
107108 var containingCodeTrackers = new List < IContainingCodeTracker > ( ) ;
108- int currentLine = 0 ;
109- // this should not happen - just in case missed
109+ int nextPossibleOtherLine = 0 ;
110+ // this should not happen for Roslyn - just in case missed.
111+ // for Blazor ignore the coverage lines that are not related to executable code visible in @code block
110112 void CreateSingleLineContainingCodeTrackerInCase ( ILine line )
111113 {
114+ nextPossibleOtherLine = line . Number ;
112115 if ( ! coverageOnlyFromFileCodeSpanRangeService )
113116 {
114117 containingCodeTrackers . Add ( this . CreateSingleLineContainingCodeTracker ( textSnapshot , line ) ) ;
@@ -133,17 +136,17 @@ void TrackOtherLines()
133136 {
134137 int to = currentCodeSpanRange . StartLine - 1 ;
135138 TrackOtherLinesTo ( to ) ;
136- currentLine = currentCodeSpanRange . EndLine + 1 ;
139+ nextPossibleOtherLine = currentCodeSpanRange . EndLine + 1 ;
137140 }
138141
139142 void TrackOtherLinesTo ( int to )
140143 {
141- if ( to < currentLine ) return ;
142- IEnumerable < int > otherCodeLines = Enumerable . Range ( currentLine , to - currentLine + 1 ) ;
144+ if ( to < nextPossibleOtherLine ) return ;
145+ IEnumerable < int > otherCodeLines = Enumerable . Range ( nextPossibleOtherLine , to - nextPossibleOtherLine + 1 ) ;
143146 foreach ( int otherCodeLine in otherCodeLines )
144147 {
145- string lineText = this . textSnapshotText . GetLineText ( textSnapshot , otherCodeLine ) . Trim ( ) ;
146- if ( ! string . IsNullOrEmpty ( lineText ) ) {
148+ string lineText = this . textSnapshotText . GetLineText ( textSnapshot , otherCodeLine ) ;
149+ if ( ! string . IsNullOrWhiteSpace ( lineText ) ) {
147150 containingCodeTrackers . Add (
148151 this . CreateOtherLines (
149152 textSnapshot ,
@@ -205,18 +208,25 @@ void LineAction(ILine line)
205208
206209 TrackOtherLinesTo ( textSnapshot . LineCount - 1 ) ;
207210
208- var orderedContainingCodeTrackers = containingCodeTrackers . OrderBy ( ct => ct . GetState ( ) . CodeSpanRange . StartLine ) . ToList ( ) ;
211+ var orderedContainingCodeTrackers = containingCodeTrackers . OrderBy (
212+ ct => ct . GetState ( ) . CodeSpanRange . StartLine ) . ToList ( ) ;
209213 return orderedContainingCodeTrackers ;
210214 }
211215
216+ #region Serialization
217+
212218 private ITrackedLines RecreateTrackedLinesFromStates (
213219 List < SerializedState > states ,
214- ITextSnapshot currentSnapshot
220+ ITextSnapshot currentSnapshot ,
221+ ILineExcluder lineExcluder
215222 )
216223 {
217224 var containingCodeTrackers = this . StatesWithinSnapshot ( states , currentSnapshot )
218225 . Select ( state => this . RecreateCoverageLines ( state , currentSnapshot ) ) . ToList ( ) ;
219- return this . containingCodeTrackedLinesFactory . Create ( containingCodeTrackers , null , null ) ;
226+ return this . containingCodeTrackedLinesFactory . Create (
227+ containingCodeTrackers ,
228+ this . GetNewCodeTrackerIfProvidesLineExcluder ( lineExcluder ) ,
229+ null ) ;
220230 }
221231
222232 private IEnumerable < SerializedState > StatesWithinSnapshot ( IEnumerable < SerializedState > states , ITextSnapshot currentSnapshot )
@@ -292,21 +302,21 @@ private IEnumerable<int> EveryLineInCodeSpanRanges(List<CodeSpanRange> newCodeCo
292302 public ITrackedLines Create ( string serializedCoverage , ITextSnapshot currentSnapshot )
293303 {
294304 List < SerializedState > states = this . jsonConvertService . DeserializeObject < List < SerializedState > > ( serializedCoverage ) ;
295- ICoverageContentType coverageContextType = this . GetCoverageContentType ( currentSnapshot ) ;
296- IFileCodeSpanRangeService fileCodeSpanRangeService = coverageContextType . FileCodeSpanRangeService ;
305+ ICoverageContentType coverageContentType = this . GetCoverageContentType ( currentSnapshot ) ;
306+ IFileCodeSpanRangeService fileCodeSpanRangeService = coverageContentType . FileCodeSpanRangeService ;
297307 return fileCodeSpanRangeService == null
298- ? this . RecreateTrackedLinesFromStates ( states , currentSnapshot )
299- : this . RecreateTrackedLinesFromCoverageContentType ( states , currentSnapshot , coverageContextType ) ;
308+ ? this . RecreateTrackedLinesFromStates ( states , currentSnapshot , coverageContentType . LineExcluder )
309+ : this . RecreateTrackedLinesFromCoverageContentType ( states , currentSnapshot , coverageContentType ) ;
300310 }
301311
302312 public string Serialize ( ITrackedLines trackedLines )
303313 {
304- var trackedLinesImpl = trackedLines as TrackedLines ;
305- List < SerializedState > states = this . GetSerializedStates ( trackedLinesImpl ) ;
314+ var containingCodeTrackerTrackedLines = trackedLines as IContainingCodeTrackerTrackedLines ;
315+ List < SerializedState > states = this . GetSerializedStates ( containingCodeTrackerTrackedLines ) ;
306316 return this . jsonConvertService . SerializeObject ( states ) ;
307317 }
308318
309- private List < SerializedState > GetSerializedStates ( TrackedLines trackedLines )
319+ private List < SerializedState > GetSerializedStates ( IContainingCodeTrackerTrackedLines trackedLines )
310320 => trackedLines . ContainingCodeTrackers . Select (
311321 containingCodeTracker => SerializedState . From ( containingCodeTracker . GetState ( ) ) ) . ToList ( ) ;
312322
@@ -322,5 +332,6 @@ public AdjustedLine(IDynamicLine dynamicLine)
322332
323333 public CoverageType CoverageType { get ; }
324334 }
335+ #endregion
325336 }
326337}
0 commit comments