Merge pull request #3144 from Unity-Technologies/fix-recursive-property-call
[mono.git] / mcs / class / referencesource / System.Web / Util / OrderingMethodFinder.cs
1 using System.Linq.Expressions;
2
3 namespace System.Web.Util {
4     internal sealed class OrderingMethodFinder : ExpressionVisitor {
5
6         private bool isTopLevelMethodCall = true;
7
8         private bool OrderingMethodFound {
9             get;
10             set;
11         }
12
13         protected override Expression VisitMethodCall(MethodCallExpression node) {
14             if (isTopLevelMethodCall && QueryableUtility.IsOrderingMethod(node)) {
15                 OrderingMethodFound = true;
16             }
17
18             isTopLevelMethodCall = false;
19             Expression result = base.VisitMethodCall(node);
20             isTopLevelMethodCall = true;
21             return result;
22         }
23
24         internal static bool OrderMethodExists(Expression expression) {
25             OrderingMethodFinder obj = new OrderingMethodFinder();
26             obj.OrderingMethodFound = false;
27             obj.Visit(expression);
28             return obj.OrderingMethodFound;
29         }
30     }
31 }