Skip to content

Commit fbdcf00

Browse files
committed
Remove most state from UnreachableCaseInspector
1 parent 5689b95 commit fbdcf00

File tree

6 files changed

+153
-153
lines changed

6 files changed

+153
-153
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/UnreachableCaseInspection/ExpressionFilter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public enum VariableClauseTypes
1717

1818
public interface IExpressionFilter
1919
{
20-
void AddExpression(IRangeClauseExpression expression);
20+
void CheckAndAddExpression(IRangeClauseExpression expression);
2121
void AddComparablePredicateFilter(string variable, string variableTypeName);
2222
bool HasFilters { get; }
2323
bool FiltersAllValues { get; }
@@ -172,12 +172,12 @@ public virtual IParseTreeValue SelectExpressionValue
172172
set
173173
{
174174
_selectExpressionValue = value;
175-
AddExpression(new IsClauseExpression(_selectExpressionValue, RelationalOperators.NEQ));
175+
CheckAndAddExpression(new IsClauseExpression(_selectExpressionValue, RelationalOperators.NEQ));
176176
}
177177
get => _selectExpressionValue;
178178
}
179179

180-
public void AddExpression(IRangeClauseExpression expression)
180+
public void CheckAndAddExpression(IRangeClauseExpression expression)
181181
{
182182
if (expression is null
183183
|| expression.ToString().Equals(string.Empty)
@@ -289,7 +289,7 @@ protected bool AddComparablePredicate(string lhs, IRangeClauseExpression express
289289
if (!positiveLogic.FiltersAllValues)
290290
{
291291
IRangeClauseExpression predicateExpression = new IsClauseExpression(parseTreeValue, expression.OpSymbol);
292-
positiveLogic.AddExpression(predicateExpression);
292+
positiveLogic.CheckAndAddExpression(predicateExpression);
293293
if (positiveLogic.FiltersAllValues)
294294
{
295295
AddSingleValue(_trueValue);
@@ -301,7 +301,7 @@ protected bool AddComparablePredicate(string lhs, IRangeClauseExpression express
301301
{
302302
IRangeClauseExpression predicateExpressionInverse
303303
= new IsClauseExpression(parseTreeValue, RelationalInverse(expression.OpSymbol));
304-
negativeLogic.AddExpression(predicateExpressionInverse);
304+
negativeLogic.CheckAndAddExpression(predicateExpressionInverse);
305305
if (negativeLogic.FiltersAllValues)
306306
{
307307
AddSingleValue(_falseValue);

Rubberduck.CodeAnalysis/Inspections/Concrete/UnreachableCaseInspection/UnreachableCaseInspection.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
using Rubberduck.Parsing.Symbols;
1414
using System;
1515
using Rubberduck.Inspections.Inspections.Extensions;
16-
using Rubberduck.JunkDrawer.Extensions;
1716
using Rubberduck.Parsing.VBA.DeclarationCaching;
1817
using Rubberduck.Parsing.VBA.Parsing;
1918

@@ -145,38 +144,40 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
145144
{
146145
var finder = DeclarationFinderProvider.DeclarationFinder;
147146
var parseTreeValueVisitor = CreateParseTreeValueVisitor(GetIdentifierReferenceForContextFunction(finder));
147+
var selectCaseInspector = _unreachableCaseInspectorFactory.Create(GetVariableTypeNameFunction(finder));
148148

149149
return finder.UserDeclarations(DeclarationType.Module)
150150
.Where(module => module != null)
151-
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder, parseTreeValueVisitor))
151+
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder, parseTreeValueVisitor, selectCaseInspector))
152152
.ToList();
153153
}
154154

155155
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
156156
{
157157
var finder = DeclarationFinderProvider.DeclarationFinder;
158158
var parseTreeValueVisitor = CreateParseTreeValueVisitor(GetIdentifierReferenceForContextFunction(finder));
159-
return DoGetInspectionResults(module, finder, parseTreeValueVisitor);
159+
var selectCaseInspector = _unreachableCaseInspectorFactory.Create(GetVariableTypeNameFunction(finder));
160+
return DoGetInspectionResults(module, finder, parseTreeValueVisitor, selectCaseInspector);
160161
}
161162

162-
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder, IParseTreeValueVisitor parseTreeValueVisitor)
163+
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder, IParseTreeValueVisitor parseTreeValueVisitor, IUnreachableCaseInspector selectCaseInspector)
163164
{
164165
var qualifiedSelectCaseStmts = Listener.Contexts(module)
165166
// ignore filtering here to make the search space smaller
166167
.Where(result => !result.IsIgnoringInspectionResultFor(finder, AnnotationName));
167168

168169
return qualifiedSelectCaseStmts
169-
.SelectMany(context => ResultsForContext(context, finder, parseTreeValueVisitor))
170+
.SelectMany(context => ResultsForContext(context, parseTreeValueVisitor, selectCaseInspector))
170171
.ToList();
171172
}
172173

173-
private IEnumerable<IInspectionResult> ResultsForContext(QualifiedContext<ParserRuleContext> qualifiedSelectCaseStmt, DeclarationFinder finder, IParseTreeValueVisitor parseTreeValueVisitor)
174+
private IEnumerable<IInspectionResult> ResultsForContext(QualifiedContext<ParserRuleContext> qualifiedSelectCaseStmt, IParseTreeValueVisitor parseTreeValueVisitor, IUnreachableCaseInspector selectCaseInspector)
174175
{
175176
var module = qualifiedSelectCaseStmt.ModuleName;
176-
var contextValues = parseTreeValueVisitor.VisitChildren(module, qualifiedSelectCaseStmt.Context);
177-
var selectCaseInspector = _unreachableCaseInspectorFactory.Create(module, (VBAParser.SelectCaseStmtContext)qualifiedSelectCaseStmt.Context, contextValues, GetVariableTypeNameFunction(finder));
177+
var selectStmt = (VBAParser.SelectCaseStmtContext)qualifiedSelectCaseStmt.Context;
178+
var contextValues = parseTreeValueVisitor.VisitChildren(module, selectStmt);
178179

179-
var results = selectCaseInspector.InspectForUnreachableCases();
180+
var results = selectCaseInspector.InspectForUnreachableCases(module, selectStmt, contextValues);
180181

181182
return results
182183
.Select(resultTpl => CreateInspectionResult(qualifiedSelectCaseStmt, resultTpl.context, resultTpl.resultType))

0 commit comments

Comments
 (0)