|
From: <pa...@us...> - 2010-11-28 03:37:37
|
Revision: 5276
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5276&view=rev
Author: patearl
Date: 2010-11-28 03:37:31 +0000 (Sun, 28 Nov 2010)
Log Message:
-----------
Linq: Added an expression visitor that provides access to parent nodes while visiting.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Linq/Visitors/ContextualNhExpressionTreeVisitor.cs
trunk/nhibernate/src/NHibernate/Linq/Visitors/VisitorContext.cs
Added: trunk/nhibernate/src/NHibernate/Linq/Visitors/ContextualNhExpressionTreeVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/ContextualNhExpressionTreeVisitor.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/ContextualNhExpressionTreeVisitor.cs 2010-11-28 03:37:31 UTC (rev 5276)
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using NHibernate.Linq.Visitors;
+
+namespace NHibernate.Linq
+{
+ public class ContextualNhExpressionTreeVisitor : NhExpressionTreeVisitor
+ {
+ private Stack<VisitorContext> _contextStack;
+
+ public ContextualNhExpressionTreeVisitor()
+ {
+ _contextStack = new Stack<VisitorContext>();
+ _contextStack.Push(null);
+ }
+
+ public override Expression VisitExpression(Expression expression)
+ {
+ if (expression == null)
+ return null;
+
+ VisitorContext context = new VisitorContext(_contextStack.Peek(), expression);
+ _contextStack.Push(context);
+
+ Expression result = base.VisitExpression(expression);
+
+ _contextStack.Pop();
+
+ return result;
+ }
+
+ protected VisitorContext Context
+ {
+ get { return _contextStack.Peek(); }
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate/Linq/Visitors/VisitorContext.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/VisitorContext.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/VisitorContext.cs 2010-11-28 03:37:31 UTC (rev 5276)
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+
+namespace NHibernate.Linq.Visitors
+{
+ public class VisitorContext
+ {
+ public VisitorContext(VisitorContext parent, Expression expression)
+ {
+ Parent = parent;
+ Expression = expression;
+ }
+
+ public VisitorContext Parent { get; private set; }
+ public Expression Expression { get; private set; }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-11-26 04:02:34 UTC (rev 5275)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-11-28 03:37:31 UTC (rev 5276)
@@ -241,6 +241,8 @@
<Compile Include="ISessionFactory.cs" />
<Compile Include="ITransaction.cs" />
<Compile Include="LazyInitializationException.cs" />
+ <Compile Include="Linq\Visitors\ContextualNhExpressionTreeVisitor.cs" />
+ <Compile Include="Linq\Visitors\VisitorContext.cs" />
<Compile Include="Loader\Loader.cs" />
<Compile Include="Loader\OuterJoinLoader.cs" />
<Compile Include="LockMode.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|