Skip to content

Commit 92e15e2

Browse files
committed
Eliminated converter class
1 parent 51661be commit 92e15e2

File tree

7 files changed

+142
-216
lines changed

7 files changed

+142
-216
lines changed

Rubberduck.Inspections/Concrete/UnreachableCaseInspection/ParseTreeValue.cs

Lines changed: 90 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ public interface IParseTreeValue
1212
bool ParsesToConstantValue { get; set; }
1313
}
1414

15+
public delegate bool TryConvertParseTreeValue<T>(IParseTreeValue value, out T result);
16+
1517
public class ParseTreeValue : IParseTreeValue
1618
{
17-
private string _valueText;
1819
private string _declaredType;
1920
private string _derivedType;
2021

@@ -31,23 +32,25 @@ public ParseTreeValue(string value, string declaredType = null)
3132
if (derivedFromTypeHint)
3233
{
3334
_declaredType = _derivedType;
34-
_valueText = RemoveTypeHintChar(value);
35+
ValueText = RemoveTypeHintChar(value);
3536
}
3637
else
3738
{
38-
_valueText = value.Replace("\"", "");
39+
ValueText = value.Replace("\"", "");
3940
}
4041
var conformToTypeName = _declaredType ?? _derivedType;
4142
ConformValueTextToType(conformToTypeName);
4243
}
4344

45+
private static bool IsStringConstant(string input) => input.StartsWith("\"") && input.EndsWith("\"");
46+
4447
public string TypeName => _declaredType ?? _derivedType ?? string.Empty;
4548

46-
public string ValueText => _valueText;
49+
public string ValueText { private set; get; }
4750

4851
public bool ParsesToConstantValue { set; get; }
4952

50-
public override string ToString() => _valueText;
53+
public override string ToString() => ValueText;
5154

5255
private static string RemoveTypeHintChar(string inputValue)
5356
{
@@ -111,32 +114,32 @@ private static string DeriveTypeName(string inputString, out bool derivedFromTyp
111114

112115
private void ConformValueTextToType(string conformTypeName)
113116
{
114-
if (_valueText.Equals(double.NaN.ToString()) && !conformTypeName.Equals(Tokens.String))
117+
if (ValueText.Equals(double.NaN.ToString()) && !conformTypeName.Equals(Tokens.String))
115118
{
116119
return;
117120
}
118121

119122
if (conformTypeName.Equals(Tokens.Long) || conformTypeName.Equals(Tokens.Integer) || conformTypeName.Equals(Tokens.Byte))
120123
{
121-
if (ParseTreeValueConverter.TryConvertValue(_valueText, out long newVal))
124+
if (TryConvertValue(this, out long newVal))
122125
{
123-
_valueText = newVal.ToString();
126+
ValueText = newVal.ToString();
124127
ParsesToConstantValue = true;
125128
}
126129
}
127130
else if (conformTypeName.Equals(Tokens.Double) || conformTypeName.Equals(Tokens.Single))
128131
{
129-
if (ParseTreeValueConverter.TryConvertValue(_valueText, out double newVal))
132+
if (TryConvertValue(this, out double newVal))
130133
{
131-
_valueText = newVal.ToString();
134+
ValueText = newVal.ToString();
132135
ParsesToConstantValue = true;
133136
}
134137
}
135138
else if (conformTypeName.Equals(Tokens.Boolean))
136139
{
137-
if (ParseTreeValueConverter.TryConvertValue(_valueText, out bool newVal))
140+
if (TryConvertValue(this, out bool newVal))
138141
{
139-
_valueText = newVal.ToString();
142+
ValueText = newVal.ToString();
140143
ParsesToConstantValue = true;
141144
}
142145
}
@@ -146,14 +149,86 @@ private void ConformValueTextToType(string conformTypeName)
146149
}
147150
else if (conformTypeName.Equals(Tokens.Currency))
148151
{
149-
if (ParseTreeValueConverter.TryConvertValue(_valueText, out decimal newVal))
152+
if (TryConvertValue(this, out decimal newVal))
150153
{
151-
_valueText = newVal.ToString();
154+
ValueText = newVal.ToString();
152155
ParsesToConstantValue = true;
153156
}
154157
}
155158
}
156159

157-
private static bool IsStringConstant(string input) => input.StartsWith("\"") && input.EndsWith("\"");
160+
public static bool TryConvertValue(IParseTreeValue parseTreeValue, out long value)
161+
{
162+
value = default;
163+
var inspVal = parseTreeValue.ValueText;
164+
if (inspVal.Equals(Tokens.True) || inspVal.Equals(Tokens.False))
165+
{
166+
value = inspVal.Equals(Tokens.True) ? -1 : 0;
167+
return true;
168+
}
169+
if (double.TryParse(inspVal, out double rational))
170+
{
171+
value = Convert.ToInt64(rational);
172+
return true;
173+
}
174+
return false;
175+
}
176+
177+
public static bool TryConvertValue(IParseTreeValue parseTreeValue, out double value)
178+
{
179+
value = default;
180+
var inspVal = parseTreeValue.ValueText;
181+
if (inspVal.Equals(Tokens.True) || inspVal.Equals(Tokens.False))
182+
{
183+
value = inspVal.Equals(Tokens.True) ? -1 : 0;
184+
return true;
185+
}
186+
if (double.TryParse(inspVal, out double rational))
187+
{
188+
value = rational;
189+
return true;
190+
}
191+
return false;
192+
}
193+
194+
public static bool TryConvertValue(IParseTreeValue parseTreeValue, out decimal value)
195+
{
196+
value = default;
197+
var inspVal = parseTreeValue.ValueText;
198+
if (inspVal.Equals(Tokens.True) || inspVal.Equals(Tokens.False))
199+
{
200+
value = inspVal.Equals(Tokens.True) ? -1 : 0;
201+
return true;
202+
}
203+
if (decimal.TryParse(inspVal, out decimal rational))
204+
{
205+
value = rational;
206+
return true;
207+
}
208+
return false;
209+
}
210+
211+
public static bool TryConvertValue(IParseTreeValue parseTreeValue, out bool value)
212+
{
213+
value = default;
214+
var inspVal = parseTreeValue.ValueText;
215+
if (inspVal.Equals(Tokens.True) || inspVal.Equals(Tokens.False))
216+
{
217+
value = inspVal.Equals(Tokens.True);
218+
return true;
219+
}
220+
if (double.TryParse(inspVal, out double dVal))
221+
{
222+
value = Math.Abs(dVal) >= double.Epsilon;
223+
return true;
224+
}
225+
return false;
226+
}
227+
228+
public static bool TryConvertValue(IParseTreeValue parseTreeValue, out string value)
229+
{
230+
value = parseTreeValue.ValueText;
231+
return true;
232+
}
158233
}
159234
}

Rubberduck.Inspections/Concrete/UnreachableCaseInspection/ParseTreeValueConverter.cs

Lines changed: 0 additions & 145 deletions
This file was deleted.

Rubberduck.Inspections/Concrete/UnreachableCaseInspection/ParseTreeValueFactory.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
using Rubberduck.Parsing.Grammar;
3+
24
namespace Rubberduck.Inspections.Concrete.UnreachableCaseInspection
35
{
46
public interface IParseTreeValueFactory

0 commit comments

Comments
 (0)