Skip to content

Commit 98d6ef8

Browse files
authored
Merge pull request #428 from RandallFlagg/filter
Filter refactoring and warning removal
2 parents 667c4e9 + b007590 commit 98d6ef8

9 files changed

Lines changed: 60 additions & 90 deletions

File tree

src/.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ dotnet_code_quality.CA1001.excluded_type_names_with_derived_types =
580580

581581
# CA1002: Do not expose generic lists
582582
dotnet_diagnostic.CA1002.severity = suggestion
583-
dotnet_code_quality.CA1002.api_surface = public, internal
583+
dotnet_code_quality.CA1002.api_surface = public
584584

585585
# CA1003: Use generic event handler instances
586586
dotnet_diagnostic.CA1003.severity = warning

src/LogExpert.Core/Classes/Filter/Filter.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using LogExpert.Core.Callback;
22
using LogExpert.Core.Classes;
3-
using LogExpert.Core.Classes.Filter;
3+
44
using NLog;
55

6-
namespace LogExpert.Classes.Filter;
6+
namespace LogExpert.Core.Classes.Filter;
77

88
internal delegate void FilterFx (FilterParams filterParams, List<int> filterResultLines, List<int> lastFilterResultLines, List<int> filterHitList);
99

@@ -13,7 +13,7 @@ internal class Filter
1313

1414
private const int PROGRESS_BAR_MODULO = 1000;
1515
private const int SPREAD_MAX = 50;
16-
private static readonly ILogger _logger = LogManager.GetCurrentClassLogger();
16+
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
1717

1818
private readonly ColumnizerCallback _callback;
1919

@@ -35,11 +35,8 @@ public Filter (ColumnizerCallback callback)
3535
#region Properties
3636

3737
public List<int> FilterResultLines { get; }
38-
3938
public List<int> LastFilterLinesList { get; }
40-
4139
public List<int> FilterHitList { get; }
42-
4340
public bool ShouldCancel { get; set; }
4441

4542
#endregion
@@ -72,7 +69,7 @@ private int DoFilter (FilterParams filterParams, int startLine, int maxCount, Li
7269
return count;
7370
}
7471

75-
ILogLine line = _callback.GetLogLine(lineNum);
72+
var line = _callback.GetLogLine(lineNum);
7673

7774
if (line == null)
7875
{
@@ -83,7 +80,7 @@ private int DoFilter (FilterParams filterParams, int startLine, int maxCount, Li
8380

8481
if (Util.TestFilterCondition(filterParams, line, _callback))
8582
{
86-
AddFilterLine(lineNum, false, filterParams, filterResultLines, lastFilterLinesList, filterHitList);
83+
AddFilterLine(lineNum, filterParams, filterResultLines, lastFilterLinesList, filterHitList);
8784
}
8885

8986
lineNum++;
@@ -99,6 +96,7 @@ private int DoFilter (FilterParams filterParams, int startLine, int maxCount, Li
9996
catch (Exception ex)
10097
{
10198
_logger.Error(ex, "Exception while filtering. Please report to developer");
99+
throw;
102100
//TODO: This information should be handled from the LogExpert project and not from LogExpert.Core.
103101
//MessageBox.Show(null,
104102
// "Exception while filtering. Please report to developer: \n\n" + ex + "\n\n" + ex.StackTrace,
@@ -108,10 +106,10 @@ private int DoFilter (FilterParams filterParams, int startLine, int maxCount, Li
108106
return count;
109107
}
110108

111-
private void AddFilterLine (int lineNum, bool immediate, FilterParams filterParams, List<int> filterResultLines, List<int> lastFilterLinesList, List<int> filterHitList)
109+
private void AddFilterLine (int lineNum, FilterParams filterParams, List<int> filterResultLines, List<int> lastFilterLinesList, List<int> filterHitList)
112110
{
113111
filterHitList.Add(lineNum);
114-
IList<int> filterResult = GetAdditionalFilterResults(filterParams, lineNum, lastFilterLinesList);
112+
var filterResult = GetAdditionalFilterResults(filterParams, lineNum, lastFilterLinesList);
115113

116114
filterResultLines.AddRange(filterResult);
117115

@@ -123,7 +121,6 @@ private void AddFilterLine (int lineNum, bool immediate, FilterParams filterPara
123121
}
124122
}
125123

126-
127124
/// <summary>
128125
/// Returns a list with 'additional filter results'. This is the given line number
129126
/// and (if back spread and/or fore spread is enabled) some additional lines.
@@ -170,6 +167,7 @@ private IList<int> GetAdditionalFilterResults (FilterParams filterParams, int li
170167
}
171168
}
172169
}
170+
173171
return resultList;
174172
}
175173

src/LogExpert.Core/Classes/Filter/FilterCancelHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
using NLog;
66

7-
namespace LogExpert.Classes.Filter;
7+
namespace LogExpert.Core.Classes.Filter;
88

99
public class FilterCancelHandler : IBackgroundProcessCancelHandler
1010
{

src/LogExpert.Core/Classes/Filter/FilterParams.cs

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections;
2+
using System.Collections.ObjectModel;
23
using System.Drawing;
34
using System.Text.Json.Serialization;
45
using System.Text.RegularExpressions;
@@ -9,38 +10,18 @@ namespace LogExpert.Core.Classes.Filter;
910
public class FilterParams : ICloneable
1011
{
1112
#region Fields
12-
13-
private string _rangeSearchText = string.Empty;
14-
private string _searchText = string.Empty;
15-
1613
//public List<string> historyList = new List<string>();
1714
//public List<string> rangeHistoryList = new List<string>();
1815

1916
#endregion
2017

2118
#region Properties
2219

23-
public string SearchText
24-
{
25-
get => _searchText;
26-
set
27-
{
28-
_searchText = value;
29-
LowerSearchText = _searchText.ToLowerInvariant();
30-
}
31-
}
20+
public string SearchText { get; set; }
3221

33-
public string RangeSearchText
34-
{
35-
get => _rangeSearchText;
36-
set
37-
{
38-
_rangeSearchText = value;
39-
LowerRangeSearchText = _rangeSearchText.ToLowerInvariant();
40-
}
41-
}
22+
public string RangeSearchText { get; set; }
4223

43-
public bool SpreadEnabled => SpreadBefore > 0 || SpreadBehind > 0;
24+
//public bool SpreadEnabled => SpreadBefore > 0 || SpreadBehind > 0;
4425

4526
public bool IsCaseSensitive { get; set; }
4627

@@ -69,7 +50,7 @@ public string RangeSearchText
6950
public bool IsRegex { get; set; }
7051

7152
// list of columns in which to search
72-
public List<int> ColumnList { get; set; } = [];
53+
public Collection<int> ColumnList { get; } = [];
7354

7455
[JsonIgnore]
7556
[field: NonSerialized]
@@ -91,11 +72,13 @@ public string RangeSearchText
9172
[field: NonSerialized]
9273
public bool LastResult { get; set; }
9374

94-
[field: NonSerialized]
95-
public string LowerRangeSearchText { get; set; } = string.Empty;
75+
///Returns RangeSearchText.ToUpperInvariant
76+
[JsonIgnore]
77+
internal string NormalizedRangeSearchText => RangeSearchText.ToUpperInvariant();
9678

97-
[field: NonSerialized]
98-
public string LowerSearchText { get; set; } = string.Empty;
79+
///Returns SearchText.ToUpperInvariant
80+
[JsonIgnore]
81+
internal string NormalizedSearchText => SearchText.ToUpperInvariant();
9982

10083
[field: NonSerialized]
10184
public Regex RangeRex { get; set; }
@@ -125,8 +108,6 @@ public FilterParams CloneWithCurrentColumnizer ()
125108
public void Init ()
126109
{
127110
LastNonEmptyCols = [];
128-
LowerRangeSearchText = RangeSearchText.ToLowerInvariant();
129-
LowerSearchText = SearchText.ToLowerInvariant();
130111
LastLine = string.Empty;
131112
}
132113

src/LogExpert.Core/Classes/Filter/FilterPipe.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,11 @@ public void CloseFile ()
7272
}
7373
}
7474

75+
//TOOD: check if the callers are checking for null before calling
7576
public bool WriteToPipe (ILogLine textLine, int orgLineNum)
7677
{
78+
ArgumentNullException.ThrowIfNull(textLine, nameof(textLine));
79+
7780
try
7881
{
7982
lock (_fileNameLock)

src/LogExpert.Core/Classes/Filter/FilterStarter.cs

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
using System.Globalization;
22

33
using LogExpert.Core.Callback;
4-
using LogExpert.Core.Classes.Filter;
54

65
using NLog;
76

8-
namespace LogExpert.Classes.Filter;
7+
namespace LogExpert.Core.Classes.Filter;
98

109
public delegate void ProgressCallback (int lineCount);
1110

@@ -86,7 +85,6 @@ public async void DoFilter (FilterParams filterParams, int startLine, int maxCou
8685
}
8786

8887
var workStartLine = startLine;
89-
List<WaitHandle> handleList = [];
9088
_progressLineCount = 0;
9189
_progressCallback = progressCallback;
9290
while (workStartLine < startLine + maxCount)
@@ -101,17 +99,11 @@ public async void DoFilter (FilterParams filterParams, int startLine, int maxCou
10199
}
102100
_logger.Info(CultureInfo.InvariantCulture, "FilterStarter starts worker for line {0}, lineCount {1}", workStartLine, interval);
103101

104-
await Task.Run(() => DoWork(filterParams, workStartLine, interval, ThreadProgressCallback)).ContinueWith(FilterDoneCallback);
102+
var filter = await Task.Run(() => DoWork(filterParams, workStartLine, interval, ThreadProgressCallback)).ConfigureAwait(false);
103+
FilterDoneCallback(filter);
105104
workStartLine += interval;
106105
}
107106

108-
WaitHandle[] handles = [.. handleList];
109-
// wait for worker threads completion
110-
if (handles.Length > 0)
111-
{
112-
WaitHandle.WaitAll(handles);
113-
}
114-
115107
MergeResults();
116108
}
117109

@@ -147,46 +139,40 @@ private Filter DoWork (FilterParams filterParams, int startLine, int maxCount, P
147139
_logger.Info(CultureInfo.InvariantCulture, "Started Filter worker [{0}] for line {1}", Environment.CurrentManagedThreadId, startLine);
148140

149141
// Give every thread own copies of ColumnizerCallback and FilterParams, because the state of the objects changes while filtering
150-
FilterParams threadFilterParams = filterParams.CloneWithCurrentColumnizer();
142+
var threadFilterParams = filterParams.CloneWithCurrentColumnizer();
151143
Filter filter = new((ColumnizerCallback)_callback.Clone());
152144
lock (_filterWorkerList)
153145
{
154146
_filterWorkerList.Add(filter);
155147
}
156148

157-
if (_shouldStop)
149+
if (!_shouldStop)
158150
{
159-
return filter;
160-
}
161151

162-
_ = filter.DoFilter(threadFilterParams, startLine, maxCount, progressCallback);
163-
_logger.Info(CultureInfo.InvariantCulture, "Filter worker [{0}] for line {1} has completed.", Environment.CurrentManagedThreadId, startLine);
152+
_ = filter.DoFilter(threadFilterParams, startLine, maxCount, progressCallback);
153+
_logger.Info(CultureInfo.InvariantCulture, "Filter worker [{0}] for line {1} has completed.", Environment.CurrentManagedThreadId, startLine);
164154

165-
lock (_filterReadyList)
166-
{
167-
_filterReadyList.Add(filter);
155+
lock (_filterReadyList)
156+
{
157+
_filterReadyList.Add(filter);
158+
}
168159
}
169160

170161
return filter;
171162
}
172163

173-
private void FilterDoneCallback (Task<Filter> filterTask)
164+
private void FilterDoneCallback (Filter filter)
174165
{
175-
if (filterTask.IsCompleted)
166+
lock (_filterReadyList)
176167
{
177-
Filter filter = filterTask.Result;
178-
179-
lock (_filterReadyList)
180-
{
181-
_filterReadyList.Add(filter);
182-
}
168+
_filterReadyList.Add(filter);
183169
}
184170
}
185171

186172
private void MergeResults ()
187173
{
188174
_logger.Info(CultureInfo.InvariantCulture, "Merging filter results.");
189-
foreach (Filter filter in _filterReadyList)
175+
foreach (var filter in _filterReadyList)
190176
{
191177
foreach (var lineNum in filter.FilterHitList)
192178
{
@@ -195,13 +181,15 @@ private void MergeResults ()
195181
_filterHitDict.Add(lineNum, lineNum);
196182
}
197183
}
184+
198185
foreach (var lineNum in filter.FilterResultLines)
199186
{
200187
if (!_filterResultDict.ContainsKey(lineNum))
201188
{
202189
_filterResultDict.Add(lineNum, lineNum);
203190
}
204191
}
192+
205193
foreach (var lineNum in filter.LastFilterLinesList)
206194
{
207195
if (!_lastFilterLinesDict.ContainsKey(lineNum))
@@ -210,6 +198,7 @@ private void MergeResults ()
210198
}
211199
}
212200
}
201+
213202
FilterHitList.AddRange(_filterHitDict.Keys);
214203
FilterResultLines.AddRange(_filterResultDict.Keys);
215204
LastFilterLinesList.AddRange(_lastFilterLinesDict.Keys);

0 commit comments

Comments
 (0)