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. |