Skip to content

Commit 6385662

Browse files
committed
Refactor Expression to Accept the Visitor
1 parent f5039b8 commit 6385662

15 files changed

+108
-34
lines changed

src/NHibernate/Linq/Expressions/NhAggregatedExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
5-
public abstract class NhAggregatedExpression : Expression
6+
public abstract class NhAggregatedExpression : NhExpression
67
{
78
protected NhAggregatedExpression(Expression expression, NhExpressionType nodeType)
89
: this(expression, expression.Type, nodeType)
@@ -32,5 +33,10 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
3233
}
3334

3435
public abstract Expression CreateNew(Expression expression);
36+
37+
protected override Expression Accept(NhExpressionVisitor visitor)
38+
{
39+
return visitor.VisitNhAggregate(this);
40+
}
3541
}
3642
}

src/NHibernate/Linq/Expressions/NhAverageExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq.Expressions;
3+
using NHibernate.Linq.Visitors;
34
using NHibernate.Util;
45

56
namespace NHibernate.Linq.Expressions
@@ -39,5 +40,10 @@ public override Expression CreateNew(Expression expression)
3940
{
4041
return new NhAverageExpression(expression);
4142
}
43+
44+
protected override Expression Accept(NhExpressionVisitor visitor)
45+
{
46+
return visitor.VisitNhAverage(this);
47+
}
4248
}
43-
}
49+
}

src/NHibernate/Linq/Expressions/NhCountExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
56
public abstract class NhCountExpression : NhAggregatedExpression
67
{
78
protected NhCountExpression(Expression expression, System.Type type)
89
: base(expression, type, NhExpressionType.Count) {}
10+
11+
protected override Expression Accept(NhExpressionVisitor visitor)
12+
{
13+
return visitor.VisitNhCount(this);
14+
}
915
}
1016

1117
public class NhShortCountExpression : NhCountExpression
@@ -29,4 +35,4 @@ public override Expression CreateNew(Expression expression)
2935
return new NhLongCountExpression(expression);
3036
}
3137
}
32-
}
38+
}

src/NHibernate/Linq/Expressions/NhDistinctExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
@@ -13,5 +14,10 @@ public override Expression CreateNew(Expression expression)
1314
{
1415
return new NhDistinctExpression(expression);
1516
}
17+
18+
protected override Expression Accept(NhExpressionVisitor visitor)
19+
{
20+
return visitor.VisitNhDistinct(this);
21+
}
1622
}
17-
}
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
3+
4+
namespace NHibernate.Linq.Expressions
5+
{
6+
public abstract class NhExpression : Expression
7+
{
8+
protected sealed override Expression Accept(ExpressionVisitor visitor)
9+
{
10+
var nhVisitor = visitor as NhExpressionVisitor;
11+
if (nhVisitor != null)
12+
return Accept(nhVisitor);
13+
14+
return base.Accept(visitor);
15+
}
16+
17+
protected abstract Expression Accept(NhExpressionVisitor visitor);
18+
}
19+
}

src/NHibernate/Linq/Expressions/NhMaxExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
@@ -13,5 +14,10 @@ public override Expression CreateNew(Expression expression)
1314
{
1415
return new NhMaxExpression(expression);
1516
}
17+
18+
protected override Expression Accept(NhExpressionVisitor visitor)
19+
{
20+
return visitor.VisitNhMax(this);
21+
}
1622
}
17-
}
23+
}

src/NHibernate/Linq/Expressions/NhMinExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
@@ -13,5 +14,10 @@ public override Expression CreateNew(Expression expression)
1314
{
1415
return new NhMinExpression(expression);
1516
}
17+
18+
protected override Expression Accept(NhExpressionVisitor visitor)
19+
{
20+
return visitor.VisitNhMin(this);
21+
}
1622
}
17-
}
23+
}

src/NHibernate/Linq/Expressions/NhNewExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using System.Collections.Generic;
22
using System.Collections.ObjectModel;
33
using System.Linq.Expressions;
4+
using NHibernate.Linq.Visitors;
45

56
namespace NHibernate.Linq.Expressions
67
{
7-
public class NhNewExpression : Expression
8+
public class NhNewExpression : NhExpression
89
{
910
public NhNewExpression(IList<string> members, IList<Expression> arguments)
1011
{
@@ -28,5 +29,10 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
2829
? new NhNewExpression(Members, arguments)
2930
: this;
3031
}
32+
33+
protected override Expression Accept(NhExpressionVisitor visitor)
34+
{
35+
return visitor.VisitNhNew(this);
36+
}
3137
}
3238
}

src/NHibernate/Linq/Expressions/NhNominatedExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace NHibernate.Linq.Expressions
1111
/// Used in the nomination of GroupBy key expressions to ensure that matching select clauses
1212
/// are generated the same way.
1313
/// </remarks>
14-
internal class NhNominatedExpression : Expression
14+
class NhNominatedExpression : Expression
1515
{
1616
public NhNominatedExpression(Expression expression)
1717
{

src/NHibernate/Linq/Expressions/NhStarExpression.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
5-
public class NhStarExpression : Expression
6+
public class NhStarExpression : NhExpression
67
{
78
public NhStarExpression(Expression expression)
89
{
@@ -23,5 +24,10 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
2324
? new NhStarExpression(newExpression)
2425
: this;
2526
}
27+
28+
protected override Expression Accept(NhExpressionVisitor visitor)
29+
{
30+
return visitor.VisitNhStar(this);
31+
}
2632
}
27-
}
33+
}

src/NHibernate/Linq/Expressions/NhSumExpression.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Linq.Expressions;
2+
using NHibernate.Linq.Visitors;
23

34
namespace NHibernate.Linq.Expressions
45
{
@@ -13,5 +14,10 @@ public override Expression CreateNew(Expression expression)
1314
{
1415
return new NhSumExpression(expression);
1516
}
17+
18+
protected override Expression Accept(NhExpressionVisitor visitor)
19+
{
20+
return visitor.VisitNhSum(this);
21+
}
1622
}
17-
}
23+
}

src/NHibernate/Linq/GroupBy/IsNonAggregatingGroupByDetectionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ protected override Expression VisitMember(MemberExpression expression)
2828
: base.VisitMember(expression);
2929
}
3030

31-
protected override Expression VisitNhAggregate(NhAggregatedExpression expression)
31+
protected internal override Expression VisitNhAggregate(NhAggregatedExpression expression)
3232
{
3333
return expression;
3434
}
@@ -39,4 +39,4 @@ protected override Expression VisitQuerySourceReference(QuerySourceReferenceExpr
3939
return expression;
4040
}
4141
}
42-
}
42+
}

src/NHibernate/Linq/GroupJoin/GroupJoinAggregateDetectionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ protected override Expression VisitSubQuery(SubQueryExpression expression)
3838
return expression;
3939
}
4040

41-
protected override Expression VisitNhAggregate(NhAggregatedExpression expression)
41+
protected internal override Expression VisitNhAggregate(NhAggregatedExpression expression)
4242
{
4343
using (_inAggregate.SetFlag())
4444
{
@@ -113,4 +113,4 @@ public void Dispose()
113113
}
114114
}
115115
}
116-
}
116+
}

src/NHibernate/Linq/Visitors/NhExpressionVisitor.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ public override Expression Visit(Expression expression)
1414
return null;
1515
}
1616

17-
switch ((NhExpressionType)expression.NodeType)
17+
switch ((NhExpressionType) expression.NodeType)
1818
{
1919
case NhExpressionType.Average:
2020
case NhExpressionType.Min:
2121
case NhExpressionType.Max:
2222
case NhExpressionType.Sum:
2323
case NhExpressionType.Count:
2424
case NhExpressionType.Distinct:
25-
return VisitNhAggregate((NhAggregatedExpression)expression);
25+
return VisitNhAggregate((NhAggregatedExpression) expression);
2626
case NhExpressionType.New:
2727
return VisitNhNew((NhNewExpression)expression);
2828
case NhExpressionType.Star:
@@ -34,17 +34,17 @@ public override Expression Visit(Expression expression)
3434
return expr;
3535
}
3636

37-
protected virtual Expression VisitNhStar(NhStarExpression expression)
37+
protected internal virtual Expression VisitNhStar(NhStarExpression expression)
3838
{
39-
return VisitExtension(expression);
39+
return expression;
4040
}
4141

42-
protected virtual Expression VisitNhNew(NhNewExpression expression)
42+
protected internal virtual Expression VisitNhNew(NhNewExpression expression)
4343
{
44-
return VisitExtension(expression);
44+
return expression;
4545
}
4646

47-
protected virtual Expression VisitNhAggregate(NhAggregatedExpression expression)
47+
protected internal virtual Expression VisitNhAggregate(NhAggregatedExpression expression)
4848
{
4949
switch ((NhExpressionType)expression.NodeType)
5050
{
@@ -65,34 +65,34 @@ protected virtual Expression VisitNhAggregate(NhAggregatedExpression expression)
6565
}
6666
}
6767

68-
protected virtual Expression VisitNhDistinct(NhDistinctExpression expression)
68+
protected internal virtual Expression VisitNhDistinct(NhDistinctExpression expression)
6969
{
70-
return VisitExtension(expression);
70+
return expression;
7171
}
7272

73-
protected virtual Expression VisitNhCount(NhCountExpression expression)
73+
protected internal virtual Expression VisitNhCount(NhCountExpression expression)
7474
{
75-
return VisitExtension(expression);
75+
return expression;
7676
}
7777

78-
protected virtual Expression VisitNhSum(NhSumExpression expression)
78+
protected internal virtual Expression VisitNhSum(NhSumExpression expression)
7979
{
80-
return VisitExtension(expression);
80+
return expression;
8181
}
8282

83-
protected virtual Expression VisitNhMax(NhMaxExpression expression)
83+
protected internal virtual Expression VisitNhMax(NhMaxExpression expression)
8484
{
85-
return VisitExtension(expression);
85+
return expression;
8686
}
8787

88-
protected virtual Expression VisitNhMin(NhMinExpression expression)
88+
protected internal virtual Expression VisitNhMin(NhMinExpression expression)
8989
{
90-
return this.VisitExtension(expression);
90+
return expression;
9191
}
9292

93-
protected virtual Expression VisitNhAverage(NhAverageExpression expression)
93+
protected internal virtual Expression VisitNhAverage(NhAverageExpression expression)
9494
{
95-
return this.VisitExtension(expression);
95+
return expression;
9696
}
9797
}
9898
}

src/NHibernate/NHibernate.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
<Compile Include="Connection\IConnectionProvider.cs" />
152152
<Compile Include="Connection\UserSuppliedConnectionProvider.cs" />
153153
<Compile Include="Linq\Clauses\INhQueryModelVisitor.cs" />
154+
<Compile Include="Linq\Expressions\NhExpression.cs" />
154155
<Compile Include="Linq\Expressions\NhStarExpression.cs" />
155156
<Compile Include="Util\DelegateHelper.cs" />
156157
<Compile Include="Dialect\BitwiseFunctionOperation.cs" />

0 commit comments

Comments
 (0)