Skip to content

Commit 2ba0051

Browse files
Copilotxperiandri
andauthored
Remove method pairs; use only StringComparison overloads for string operations
Co-authored-by: xperiandri <2365592+xperiandri@users.noreply.github.com>
1 parent f10e0a1 commit 2ba0051

1 file changed

Lines changed: 13 additions & 24 deletions

File tree

src/FSharp.Data.GraphQL.Server.Middleware/ObjectListFilter.fs

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,11 @@ module ObjectListFilter =
157157
let private stringType = typeof<string>
158158
let private genericIEnumerableType = typedefof<IEnumerable<_>>
159159

160-
let private StringStartsWithMethod = stringType.GetMethod ("StartsWith", [| stringType |])
161-
let private StringEndsWithMethod = stringType.GetMethod ("EndsWith", [| stringType |])
162-
let private StringContainsMethod = stringType.GetMethod ("Contains", [| stringType |])
163160
let private stringComparisonType = typeof<StringComparison>
164-
let private StringStartsWithWithComparisonMethod = stringType.GetMethod ("StartsWith", [| stringType; stringComparisonType |])
165-
let private StringEndsWithWithComparisonMethod = stringType.GetMethod ("EndsWith", [| stringType; stringComparisonType |])
166-
let private StringContainsWithComparisonMethod = stringType.GetMethod ("Contains", [| stringType; stringComparisonType |])
167-
let private StringEqualsWithComparisonMethod = stringType.GetMethod ("Equals", [| stringType; stringComparisonType |])
161+
let private StringStartsWithMethod = stringType.GetMethod ("StartsWith", [| stringType; stringComparisonType |])
162+
let private StringEndsWithMethod = stringType.GetMethod ("EndsWith", [| stringType; stringComparisonType |])
163+
let private StringContainsMethod = stringType.GetMethod ("Contains", [| stringType; stringComparisonType |])
164+
let private StringEqualsMethod = stringType.GetMethod ("Equals", [| stringType; stringComparisonType |])
168165
let private unwrapOptionMethod =
169166
FSharp.Data.GraphQL.Helpers.moduleType.GetMethod (nameof Helpers.unwrap)
170167

@@ -232,6 +229,7 @@ module ObjectListFilter =
232229
if obj.ReferenceEquals (sc, StringComparer.OrdinalIgnoreCase) then ValueSome StringComparison.OrdinalIgnoreCase
233230
elif obj.ReferenceEquals (sc, StringComparer.InvariantCultureIgnoreCase) then ValueSome StringComparison.InvariantCultureIgnoreCase
234231
elif obj.ReferenceEquals (sc, StringComparer.CurrentCultureIgnoreCase) then ValueSome StringComparison.CurrentCultureIgnoreCase
232+
elif obj.ReferenceEquals (sc, StringComparer.Ordinal) then ValueSome StringComparison.Ordinal
235233
elif obj.ReferenceEquals (sc, StringComparer.InvariantCulture) then ValueSome StringComparison.InvariantCulture
236234
elif obj.ReferenceEquals (sc, StringComparer.CurrentCulture) then ValueSome StringComparison.CurrentCulture
237235
else ValueNone
@@ -261,7 +259,7 @@ module ObjectListFilter =
261259
match comparerToStringComparison comparer with
262260
| ValueSome comparison ->
263261
let value = Helpers.unwrap (box f.Value) :?> string
264-
Expression.Not (Expression.Call (normalizeStringMemberExpr ``member``, StringEqualsWithComparisonMethod, Expression.Constant (value, typeof<string>), Expression.Constant comparison)) :> Expression
262+
Expression.Not (Expression.Call (normalizeStringMemberExpr ``member``, StringEqualsMethod, Expression.Constant (value, typeof<string>), Expression.Constant comparison)) :> Expression
265263
| ValueNone ->
266264
let hasEqualityOperator = hasEqualityOperator ``member``.Type
267265
match f.Value with
@@ -280,7 +278,7 @@ module ObjectListFilter =
280278
match comparerToStringComparison comparer with
281279
| ValueSome comparison ->
282280
let value = Helpers.unwrap (box f.Value) :?> string
283-
Expression.Call (normalizeStringMemberExpr ``member``, StringEqualsWithComparisonMethod, Expression.Constant (value, typeof<string>), Expression.Constant comparison) :> Expression
281+
Expression.Call (normalizeStringMemberExpr ``member``, StringEqualsMethod, Expression.Constant (value, typeof<string>), Expression.Constant comparison) :> Expression
284282
| ValueNone ->
285283
let hasEqualityOperator = hasEqualityOperator ``member``.Type
286284
match f.Value with
@@ -317,18 +315,12 @@ module ObjectListFilter =
317315
| NonEnumerableCast ``type`` -> Expression.LessThanOrEqual ((unsafeConvertTo ``type`` ``member``), Expression.Constant f.Value)
318316
| StartsWith (f, comparer) ->
319317
let ``member`` = Expression.PropertyOrField (param, f.FieldName)
320-
match comparerToStringComparison comparer with
321-
| ValueSome comparison ->
322-
Expression.Call (normalizeStringMemberExpr ``member``, StringStartsWithWithComparisonMethod, Expression.Constant f.Value, Expression.Constant comparison)
323-
| ValueNone ->
324-
Expression.Call (normalizeStringMemberExpr ``member``, StringStartsWithMethod, Expression.Constant f.Value)
318+
let comparison = comparerToStringComparison comparer |> ValueOption.defaultValue StringComparison.Ordinal
319+
Expression.Call (normalizeStringMemberExpr ``member``, StringStartsWithMethod, Expression.Constant f.Value, Expression.Constant comparison)
325320
| EndsWith (f, comparer) ->
326321
let ``member`` = Expression.PropertyOrField (param, f.FieldName)
327-
match comparerToStringComparison comparer with
328-
| ValueSome comparison ->
329-
Expression.Call (normalizeStringMemberExpr ``member``, StringEndsWithWithComparisonMethod, Expression.Constant f.Value, Expression.Constant comparison)
330-
| ValueNone ->
331-
Expression.Call (normalizeStringMemberExpr ``member``, StringEndsWithMethod, Expression.Constant f.Value)
322+
let comparison = comparerToStringComparison comparer |> ValueOption.defaultValue StringComparison.Ordinal
323+
Expression.Call (normalizeStringMemberExpr ``member``, StringEndsWithMethod, Expression.Constant f.Value, Expression.Constant comparison)
332324

333325
| Contains (f, comparer) ->
334326
let ``member`` = Expression.PropertyOrField (param, f.FieldName)
@@ -366,11 +358,8 @@ module ObjectListFilter =
366358
| :? FieldInfo as field when field.FieldType |> isEnumerable -> callContains field.FieldType
367359
| _ ->
368360
let unwrappedValue = Helpers.unwrap f.Value
369-
match comparerToStringComparison comparer with
370-
| ValueSome comparison ->
371-
Expression.Call (normalizeStringMemberExpr ``member``, StringContainsWithComparisonMethod, Expression.Constant (unwrappedValue :?> string, typeof<string>), Expression.Constant comparison)
372-
| ValueNone ->
373-
Expression.Call (normalizeStringMemberExpr ``member``, StringContainsMethod, Expression.Constant unwrappedValue)
361+
let comparison = comparerToStringComparison comparer |> ValueOption.defaultValue StringComparison.Ordinal
362+
Expression.Call (normalizeStringMemberExpr ``member``, StringContainsMethod, Expression.Constant (unwrappedValue :?> string, typeof<string>), Expression.Constant comparison)
374363
| In f when not (f.Value.IsEmpty) ->
375364
let ``member`` = Expression.PropertyOrField (param, f.FieldName)
376365
let enumerableContains = getEnumerableContainsMethod objectType

0 commit comments

Comments
 (0)