public static Expression ResolveExpression (
Expression expression,
IMappingResolver resolver,
IMappingResolutionStage stage,
IMappingResolutionContext context,
UniqueIdentifierGenerator generator)
{
ArgumentUtility.CheckNotNull ("expression", expression);
ArgumentUtility.CheckNotNull ("resolver", resolver);
ArgumentUtility.CheckNotNull ("stage", stage);
ArgumentUtility.CheckNotNull ("context", context);
ArgumentUtility.CheckNotNull ("generator", generator);
var entityIdentityResolver = new EntityIdentityResolver (stage, resolver, context);
var comparisonSplitter = new CompoundExpressionComparisonSplitter();
var namedExpressionCombiner = new NamedExpressionCombiner (context);
var groupAggregateSimplifier = new GroupAggregateSimplifier (stage, context);
var visitor1 = new ResolvingExpressionVisitor (
resolver, stage, context, generator, entityIdentityResolver, comparisonSplitter, namedExpressionCombiner, groupAggregateSimplifier, false);
var result1 = visitor1.VisitExpression (expression);
var visitor2 = new ResolvingExpressionVisitor (
resolver, stage, context, generator, entityIdentityResolver, comparisonSplitter, namedExpressionCombiner, groupAggregateSimplifier, true);
var result2 = visitor2.VisitExpression (result1);
return result2;
}