public static Expression Resolve(this Expression source, IGeneratedQueryCode gc, ICodeContext cc, CompositionContainer container)
        {
            if (cc == null)
            {
                cc = new CodeContext();
            }

            // It does happen that we are asked to translate a null expression. This could be a static method call, for example.

            if (source == null)
            {
                return(null);
            }

            try
            {
                Debug.WriteLine("Expression Resolver: Resolving {0}{1}", source.ToString(), "");
                Debug.Indent();
                var r = ResolveToExpression.Translate(source, gc, cc, container);
                Debug.WriteLine("Expression Resolver: Result: {0}{1}", r == null ? "<null>" : r.ToString(), "");
                return(r);
            }
            finally
            {
                Debug.Unindent();
            }
        }