Skip to content

Commit e814da8

Browse files
committed
Refactoring of ExpressionProcessor
1 parent 4983721 commit e814da8

File tree

1 file changed

+51
-66
lines changed

1 file changed

+51
-66
lines changed

src/NHibernate/Impl/ExpressionProcessor.cs

Lines changed: 51 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,11 @@ public ICriterion CreateCriterion(ProjectionInfo rhs,
6363
{
6464
if (_property != null && rhs._property != null)
6565
return ssFunc(_property, rhs._property);
66-
else if (_property != null)
66+
if (_property != null)
6767
return spFunc(_property, rhs._projection);
68-
else if (rhs._property != null)
68+
if (rhs._property != null)
6969
return psFunc(_projection, rhs._property);
70-
else
71-
return ppFunc(_projection, rhs._projection);
70+
return ppFunc(_projection, rhs._projection);
7271
}
7372

7473
public T Create<T>(Func<string, T> stringFunc, Func<IProjection, T> projectionFunc)
@@ -94,10 +93,9 @@ public string AsProperty()
9493
{
9594
if (_property != null) return _property;
9695

97-
if (!(_projection is PropertyProjection))
98-
throw new Exception("Cannot determine property for " + _projection.ToString());
99-
100-
return ((PropertyProjection)_projection).PropertyName;
96+
var propertyProjection = _projection as PropertyProjection;
97+
if (propertyProjection == null) throw new Exception("Cannot determine property for " + _projection);
98+
return propertyProjection.PropertyName;
10199
}
102100
}
103101

@@ -267,10 +265,9 @@ public static ProjectionInfo FindMemberProjection(Expression expression)
267265
/// <returns>The name of the member property</returns>
268266
public static string FindMemberExpression(Expression expression)
269267
{
270-
if (expression is MemberExpression)
268+
var memberExpression = expression as MemberExpression;
269+
if (memberExpression != null)
271270
{
272-
MemberExpression memberExpression = (MemberExpression)expression;
273-
274271
if (memberExpression.Expression.NodeType == ExpressionType.MemberAccess
275272
|| memberExpression.Expression.NodeType == ExpressionType.Call)
276273
{
@@ -283,30 +280,26 @@ public static string FindMemberExpression(Expression expression)
283280

284281
return FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name;
285282
}
286-
else if (IsConversion(memberExpression.Expression.NodeType))
283+
if (IsConversion(memberExpression.Expression.NodeType))
287284
{
288285
return (FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name).TrimStart('.');
289286
}
290-
else
291-
{
292-
return memberExpression.Member.Name;
293-
}
287+
288+
return memberExpression.Member.Name;
294289
}
295290

296-
if (expression is UnaryExpression)
291+
var unaryExpression = expression as UnaryExpression;
292+
if (unaryExpression != null)
297293
{
298-
UnaryExpression unaryExpression = (UnaryExpression)expression;
299-
300294
if (!IsConversion(unaryExpression.NodeType))
301-
throw new Exception("Cannot interpret member from " + expression.ToString());
295+
throw new Exception("Cannot interpret member from " + expression);
302296

303297
return FindMemberExpression(unaryExpression.Operand);
304298
}
305299

306-
if (expression is MethodCallExpression)
300+
var methodCallExpression = expression as MethodCallExpression;
301+
if (methodCallExpression != null)
307302
{
308-
MethodCallExpression methodCallExpression = (MethodCallExpression)expression;
309-
310303
if (methodCallExpression.Method.Name == "GetType")
311304
return ClassMember(methodCallExpression.Object);
312305

@@ -316,13 +309,13 @@ public static string FindMemberExpression(Expression expression)
316309
if (methodCallExpression.Method.Name == "First")
317310
return FindMemberExpression(methodCallExpression.Arguments[0]);
318311

319-
throw new Exception("Unrecognised method call in expression " + expression.ToString());
312+
throw new Exception("Unrecognised method call in expression " + methodCallExpression);
320313
}
321314

322315
if (expression is ParameterExpression)
323316
return "";
324317

325-
throw new Exception("Could not determine member from " + expression.ToString());
318+
throw new Exception("Could not determine member from " + expression);
326319
}
327320

328321
/// <summary>
@@ -343,10 +336,9 @@ public static string FindPropertyExpression(Expression expression)
343336
/// <returns>Evaluated detached criteria</returns>
344337
public static DetachedCriteria FindDetachedCriteria(Expression expression)
345338
{
346-
MethodCallExpression methodCallExpression = expression as MethodCallExpression;
347-
339+
var methodCallExpression = expression as MethodCallExpression;
348340
if (methodCallExpression == null)
349-
throw new Exception("right operand should be detachedQueryInstance.As<T>() - " + expression.ToString());
341+
throw new Exception("right operand should be detachedQueryInstance.As<T>() - " + expression);
350342

351343
var criteriaExpression = Expression.Lambda(methodCallExpression.Object).Compile();
352344
QueryOver detachedQuery = (QueryOver)criteriaExpression.DynamicInvoke();
@@ -362,41 +354,38 @@ private static bool EvaluatesToNull(Expression expression)
362354

363355
private static System.Type FindMemberType(Expression expression)
364356
{
365-
if (expression is MemberExpression)
357+
var memberExpression = expression as MemberExpression;
358+
if (memberExpression != null)
366359
{
367-
MemberExpression memberExpression = (MemberExpression)expression;
368-
369360
return memberExpression.Type;
370361
}
371362

372-
if (expression is UnaryExpression)
363+
var unaryExpression = expression as UnaryExpression;
364+
if (unaryExpression != null)
373365
{
374-
UnaryExpression unaryExpression = (UnaryExpression)expression;
375-
376366
if (!IsConversion(unaryExpression.NodeType))
377-
throw new Exception("Cannot interpret member from " + expression.ToString());
367+
throw new Exception("Cannot interpret member from " + expression);
378368

379369
return FindMemberType(unaryExpression.Operand);
380370
}
381371

382-
if (expression is MethodCallExpression)
372+
var methodCallExpression = expression as MethodCallExpression;
373+
if (methodCallExpression != null)
383374
{
384-
var methodCallExpression = (MethodCallExpression)expression;
385375
return methodCallExpression.Method.ReturnType;
386376
}
387377

388-
throw new Exception("Could not determine member type from " + expression.ToString());
378+
throw new Exception("Could not determine member type from " + expression);
389379
}
390380

391381
private static bool IsMemberExpression(Expression expression)
392382
{
393383
if (expression is ParameterExpression)
394384
return true;
395385

396-
if (expression is MemberExpression)
386+
var memberExpression = expression as MemberExpression;
387+
if (memberExpression != null)
397388
{
398-
MemberExpression memberExpression = (MemberExpression)expression;
399-
400389
if (memberExpression.Expression == null)
401390
return false; // it's a member of a static class
402391

@@ -407,12 +396,11 @@ private static bool IsMemberExpression(Expression expression)
407396
return EvaluatesToNull(memberExpression.Expression);
408397
}
409398

410-
if (expression is UnaryExpression)
399+
var unaryExpression = expression as UnaryExpression;
400+
if (unaryExpression != null)
411401
{
412-
UnaryExpression unaryExpression = (UnaryExpression)expression;
413-
414402
if (!IsConversion(unaryExpression.NodeType))
415-
throw new Exception("Cannot interpret member from " + expression.ToString());
403+
throw new Exception("Cannot interpret member from " + expression);
416404

417405
return IsMemberExpression(unaryExpression.Operand);
418406
}
@@ -536,18 +524,16 @@ private static ICriterion ProcessMemberExpression(Expression left, Expression ri
536524

537525
private static ICriterion ProcessAndExpression(BinaryExpression expression)
538526
{
539-
return
540-
NHibernate.Criterion.Restrictions.And(
541-
ProcessExpression(expression.Left),
542-
ProcessExpression(expression.Right));
527+
return Restrictions.And(
528+
ProcessExpression(expression.Left),
529+
ProcessExpression(expression.Right));
543530
}
544531

545532
private static ICriterion ProcessOrExpression(BinaryExpression expression)
546533
{
547-
return
548-
NHibernate.Criterion.Restrictions.Or(
549-
ProcessExpression(expression.Left),
550-
ProcessExpression(expression.Right));
534+
return Restrictions.Or(
535+
ProcessExpression(expression.Left),
536+
ProcessExpression(expression.Right));
551537
}
552538

553539
private static ICriterion ProcessBinaryExpression(BinaryExpression expression)
@@ -572,7 +558,7 @@ private static ICriterion ProcessBinaryExpression(BinaryExpression expression)
572558
return ProcessSimpleExpression(expression);
573559

574560
default:
575-
throw new Exception("Unhandled binary expression: " + expression.NodeType + ", " + expression.ToString());
561+
throw new Exception("Unhandled binary expression: " + expression.NodeType + ", " + expression);
576562
}
577563
}
578564

@@ -583,40 +569,39 @@ private static ICriterion ProcessBooleanExpression(Expression expression)
583569
return Restrictions.Eq(FindMemberExpression(expression), true);
584570
}
585571

586-
if (expression is UnaryExpression)
572+
var unaryExpression = expression as UnaryExpression;
573+
if (unaryExpression != null)
587574
{
588-
UnaryExpression unaryExpression = (UnaryExpression)expression;
589-
590575
if (unaryExpression.NodeType != ExpressionType.Not)
591-
throw new Exception("Cannot interpret member from " + expression.ToString());
576+
throw new Exception("Cannot interpret member from " + expression);
592577

593578
if (IsMemberExpression(unaryExpression.Operand))
594579
return Restrictions.Eq(FindMemberExpression(unaryExpression.Operand), false);
595580
else
596581
return Restrictions.Not(ProcessExpression(unaryExpression.Operand));
597582
}
598583

599-
if (expression is MethodCallExpression)
584+
var methodCallExpression = expression as MethodCallExpression;
585+
if (methodCallExpression != null)
600586
{
601-
MethodCallExpression methodCallExpression = (MethodCallExpression)expression;
602587
return ProcessCustomMethodCall(methodCallExpression);
603588
}
604589

605-
if (expression is TypeBinaryExpression)
590+
var typeBinaryExpression = expression as TypeBinaryExpression;
591+
if (typeBinaryExpression != null)
606592
{
607-
TypeBinaryExpression typeBinaryExpression = (TypeBinaryExpression)expression;
608593
return Restrictions.Eq(ClassMember(typeBinaryExpression.Expression), typeBinaryExpression.TypeOperand.FullName);
609594
}
610595

611-
throw new Exception("Could not determine member type from " + expression.NodeType + ", " + expression.ToString() + ", " + expression.GetType());
596+
throw new Exception("Could not determine member type from " + expression.NodeType + ", " + expression + ", " + expression.GetType());
612597
}
613598

614599
private static string ClassMember(Expression expression)
615600
{
616601
if (expression.NodeType == ExpressionType.MemberAccess)
617602
return FindMemberExpression(expression) + ".class";
618-
else
619-
return "class";
603+
604+
return "class";
620605
}
621606

622607
public static string Signature(MethodInfo methodInfo)
@@ -625,7 +610,7 @@ public static string Signature(MethodInfo methodInfo)
625610
methodInfo = methodInfo.GetGenericMethodDefinition();
626611

627612
return methodInfo.DeclaringType.FullName
628-
+ ":" + methodInfo.ToString();
613+
+ ":" + methodInfo;
629614
}
630615

631616
private static ICriterion ProcessCustomMethodCall(MethodCallExpression methodCallExpression)

0 commit comments

Comments
 (0)