1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Diagnostics . CodeAnalysis ;
3
4
using System . Linq ;
4
5
using System . Linq . Expressions ;
5
6
@@ -11,17 +12,16 @@ namespace CodeJam.Expressions
11
12
/// <see cref="Expression"/> Extensions.
12
13
/// </summary>
13
14
[ PublicAPI ]
14
- public static class ExpressionExtensions
15
+ public static partial class ExpressionExtensions
15
16
{
16
17
#region VisitInternal
17
-
18
- static void VisitInternal < T > ( IEnumerable < T > source , Action < T > func )
18
+ private static void VisitInternal < T > ( IEnumerable < T > source , Action < T > func )
19
19
{
20
20
foreach ( var item in source )
21
21
func ( item ) ;
22
22
}
23
23
24
- static void VisitInternal < T > ( IEnumerable < T > source , Action < Expression > func )
24
+ private static void VisitInternal < T > ( IEnumerable < T > source , Action < Expression > func )
25
25
where T : Expression
26
26
{
27
27
foreach ( var item in source )
@@ -40,7 +40,7 @@ public static void Visit([CanBeNull] this Expression expr, [NotNull] Action<Expr
40
40
VisitInternal ( expr , func ) ;
41
41
}
42
42
43
- static void VisitInternal ( this Expression expr , Action < Expression > func )
43
+ private static void VisitInternal ( this Expression expr , Action < Expression > func )
44
44
{
45
45
if ( expr == null )
46
46
return ;
@@ -303,13 +303,13 @@ static void VisitInternal(this Expression expr, Action<Expression> func)
303
303
func ( expr ) ;
304
304
}
305
305
306
- static void VisitInternal < T > ( IEnumerable < T > source , Func < T , bool > func )
306
+ private static void VisitInternal < T > ( IEnumerable < T > source , Func < T , bool > func )
307
307
{
308
308
foreach ( var item in source )
309
309
func ( item ) ;
310
310
}
311
311
312
- static void VisitInternal < T > ( IEnumerable < T > source , Func < Expression , bool > func )
312
+ private static void VisitInternal < T > ( IEnumerable < T > source , Func < Expression , bool > func )
313
313
where T : Expression
314
314
{
315
315
foreach ( var item in source )
@@ -328,7 +328,8 @@ public static void Visit([CanBeNull] this Expression expr, [NotNull] Func<Expres
328
328
VisitInternal ( expr , func ) ;
329
329
}
330
330
331
- static void VisitInternal ( this Expression expr , Func < Expression , bool > func )
331
+ [ SuppressMessage ( "ReSharper" , "TailRecursiveCall" ) ]
332
+ private static void VisitInternal ( this Expression expr , Func < Expression , bool > func )
332
333
{
333
334
if ( expr == null || ! func ( expr ) )
334
335
return ;
@@ -590,8 +591,7 @@ static void VisitInternal(this Expression expr, Func<Expression,bool> func)
590
591
#endregion
591
592
592
593
#region Find
593
-
594
- static Expression FindInternal < T > ( IEnumerable < T > source , Func < T , Expression > func )
594
+ private static Expression FindInternal < T > ( IEnumerable < T > source , Func < T , Expression > func )
595
595
{
596
596
foreach ( var item in source )
597
597
{
@@ -603,7 +603,7 @@ static Expression FindInternal<T>(IEnumerable<T> source, Func<T,Expression> func
603
603
return null ;
604
604
}
605
605
606
- static Expression FindInternal < T > ( IEnumerable < T > source , Func < Expression , bool > func )
606
+ private static Expression FindInternal < T > ( IEnumerable < T > source , Func < Expression , bool > func )
607
607
where T : Expression
608
608
{
609
609
foreach ( var item in source )
@@ -642,7 +642,8 @@ public static Expression Find([CanBeNull] this Expression expr, [NotNull] Func<E
642
642
return FindInternal ( expr , func ) ;
643
643
}
644
644
645
- static Expression FindInternal ( this Expression expr , Func < Expression , bool > func )
645
+ [ SuppressMessage ( "ReSharper" , "TailRecursiveCall" ) ]
646
+ private static Expression FindInternal ( this Expression expr , Func < Expression , bool > func )
646
647
{
647
648
if ( expr == null || func ( expr ) )
648
649
return expr ;
@@ -932,7 +933,7 @@ public static Expression ReplaceParameters(
932
933
} ) ;
933
934
}
934
935
935
- static IEnumerable < T > TransformInternal < T > ( ICollection < T > source , Func < T , T > func )
936
+ private static IEnumerable < T > TransformInternal < T > ( ICollection < T > source , Func < T , T > func )
936
937
where T : class
937
938
{
938
939
var modified = false ;
@@ -948,7 +949,7 @@ static IEnumerable<T> TransformInternal<T>(ICollection<T> source, Func<T,T> func
948
949
return modified ? list : source ;
949
950
}
950
951
951
- static IEnumerable < T > TransformInternal < T > ( ICollection < T > source , Func < Expression , Expression > func )
952
+ private static IEnumerable < T > TransformInternal < T > ( ICollection < T > source , Func < Expression , Expression > func )
952
953
where T : Expression
953
954
{
954
955
var modified = false ;
@@ -993,7 +994,7 @@ public static Expression Transform([CanBeNull] this Expression expr, [NotNull] F
993
994
return TransformInternal ( expr , func ) ;
994
995
}
995
996
996
- static Expression TransformInternal ( this Expression expr , Func < Expression , Expression > func )
997
+ private static Expression TransformInternal ( this Expression expr , Func < Expression , Expression > func )
997
998
{
998
999
if ( expr == null )
999
1000
return null ;
@@ -1109,7 +1110,7 @@ static Expression TransformInternal(this Expression expr, Func<Expression,Expres
1109
1110
var b = TransformInternal ( e . Body , func ) ;
1110
1111
var p = TransformInternal ( e . Parameters , func ) ;
1111
1112
1112
- return b != e . Body || p != e . Parameters ? Expression . Lambda ( expr . Type , b , p . ToArray ( ) ) : expr ;
1113
+ return b != e . Body || ! ReferenceEquals ( p , e . Parameters ) ? Expression . Lambda ( expr . Type , b , p . ToArray ( ) ) : expr ;
1113
1114
}
1114
1115
1115
1116
case ExpressionType . ListInit :
@@ -1120,7 +1121,7 @@ static Expression TransformInternal(this Expression expr, Func<Expression,Expres
1120
1121
TransformInternal ( e . Initializers , p =>
1121
1122
{
1122
1123
var args = TransformInternal ( p . Arguments , func ) ;
1123
- return args != p . Arguments ? Expression . ElementInit ( p . AddMethod , args ) : p ;
1124
+ return ! ReferenceEquals ( args , p . Arguments ) ? Expression . ElementInit ( p . AddMethod , args ) : p ;
1124
1125
} ) ) ;
1125
1126
}
1126
1127
@@ -1149,7 +1150,7 @@ static Expression TransformInternal(this Expression expr, Func<Expression,Expres
1149
1150
TransformInternal ( ml . Initializers , p =>
1150
1151
{
1151
1152
var args = TransformInternal ( p . Arguments , func ) ;
1152
- return args != p . Arguments ? Expression . ElementInit ( p . AddMethod , args ) : p ;
1153
+ return ! ReferenceEquals ( args , p . Arguments ) ? Expression . ElementInit ( p . AddMethod , args ) : p ;
1153
1154
} ) ) ;
1154
1155
}
1155
1156
0 commit comments