Exemple #1
0
        public ExprDeclaredNodeImpl(
            IContainer container,
            ExpressionDeclItem prototype,
            IList <ExprNode> chainParameters,
            ContextDescriptor contextDescriptor)
        {
            _prototype       = prototype;
            _chainParameters = chainParameters;

            // copy expression - we do it at this time and not later
            try {
                _expressionBodyCopy = (ExprNode)SerializableObjectCopier.Copy(container, prototype.Inner);
            } catch (Exception e) {
                throw new Exception("Internal error providing expression tree: " + e.Message, e);
            }

            // replace context-properties where they are currently identifiers
            if (contextDescriptor == null)
            {
                return;
            }
            var visitorWParent = new ExprNodeIdentVisitorWParent();

            _expressionBodyCopy.Accept(visitorWParent);
            foreach (var pair in visitorWParent.IdentNodes)
            {
                var streamOrProp = pair.Second.StreamOrPropertyName;
                if (streamOrProp != null && contextDescriptor.ContextPropertyRegistry.IsContextPropertyPrefix(streamOrProp))
                {
                    var context = new ExprContextPropertyNode(pair.Second.UnresolvedPropertyName);
                    if (pair.First == null)
                    {
                        _expressionBodyCopy = context;
                    }
                    else
                    {
                        ExprNodeUtility.ReplaceChildNode(pair.First, pair.Second, context);
                    }
                }
            }
        }
 public void QExprContextProp(ExprContextPropertyNode exprContextPropertyNode)
 {
 }