コード例 #1
0
        private IEdmDelayedValue MapLabeledExpressionToDelayedValue(IEdmExpression expression, EdmExpressionEvaluator.DelayedExpressionContext delayedContext, IEdmStructuredValue context)
        {
            EdmExpressionEvaluator.DelayedValue delayedCollectionElement = null;
            IEdmLabeledExpression edmLabeledExpression = expression as IEdmLabeledExpression;

            if (edmLabeledExpression != null)
            {
                if (!this.labeledValues.TryGetValue(edmLabeledExpression, out delayedCollectionElement))
                {
                    EdmExpressionEvaluator.DelayedExpressionContext delayedExpressionContext  = delayedContext;
                    EdmExpressionEvaluator.DelayedExpressionContext delayedExpressionContext1 = delayedExpressionContext;
                    if (delayedExpressionContext == null)
                    {
                        delayedExpressionContext1 = new EdmExpressionEvaluator.DelayedExpressionContext(this, context);
                    }
                    delayedCollectionElement = new EdmExpressionEvaluator.DelayedCollectionElement(delayedExpressionContext1, edmLabeledExpression.Expression);
                    this.labeledValues[edmLabeledExpression] = delayedCollectionElement;
                    return(delayedCollectionElement);
                }
                else
                {
                    return(delayedCollectionElement);
                }
            }
            else
            {
                return(new EdmExpressionEvaluator.DelayedCollectionElement(delayedContext, expression));
            }
        }
コード例 #2
0
        private IEdmDelayedValue MapLabeledExpressionToDelayedValue(IEdmExpression expression, DelayedExpressionContext delayedContext, IEdmStructuredValue context)
        {
            //// Labeled expressions map to delayed values either at the point of definition or at a point of reference
            //// (evaluation of a LabeledExpressionReference that refers to the expression). All of these must map to
            //// a single delayed value (so that the value itself is evaluated only once).

            IEdmLabeledExpression labeledExpression = expression as IEdmLabeledExpression;

            if (labeledExpression == null)
            {
                //// If an expression has no label, there can be no references to it and so only the point of definition needs a mapping to a delayed value,
                //// and so there is no need to cache the delayed value. The point of definition always supplies a context.

                System.Diagnostics.Debug.Assert(delayedContext != null, "Labeled element definition failed to supply an evaluation context.");
                return(new DelayedCollectionElement(delayedContext, expression));
            }

            DelayedValue expressionValue;

            if (this.labeledValues.TryGetValue(labeledExpression, out expressionValue))
            {
                return(expressionValue);
            }

            expressionValue = new DelayedCollectionElement(delayedContext ?? new DelayedExpressionContext(this, context), labeledExpression.Expression);
            this.labeledValues[labeledExpression] = expressionValue;
            return(expressionValue);
        }
コード例 #3
0
        private IEdmLabeledExpression ComputeElement()
        {
            IEdmLabeledExpression result = this.Schema.FindLabeledElement(this.expression.Label, this.bindingContext);

            if (result != null)
            {
                return(result);
            }

            return(new UnresolvedLabeledElement(this.expression.Label, this.Location));
        }
コード例 #4
0
 protected override void ProcessLabeledExpression(IEdmLabeledExpression element)
 {
     if (element.Name == null)
     {
         base.ProcessLabeledExpression(element);
     }
     else
     {
         this.BeginElement(element, this.schemaWriter.WriteLabeledElementHeader);
         base.ProcessLabeledExpression(element);
         this.EndElement(element);
     }
 }
コード例 #5
0
		public void JustDecompileGenerated_set_ReferencedLabeledExpression(IEdmLabeledExpression value)
		{
			EdmUtil.CheckArgumentNull<IEdmLabeledExpression>(value, "value");
			if (this.referencedLabeledExpression == null)
			{
				this.referencedLabeledExpression = value;
				return;
			}
			else
			{
				throw new InvalidOperationException(Strings.ValueHasAlreadyBeenSet);
			}
		}
コード例 #6
0
 public void JustDecompileGenerated_set_ReferencedLabeledExpression(IEdmLabeledExpression value)
 {
     EdmUtil.CheckArgumentNull <IEdmLabeledExpression>(value, "value");
     if (this.referencedLabeledExpression == null)
     {
         this.referencedLabeledExpression = value;
         return;
     }
     else
     {
         throw new InvalidOperationException(Strings.ValueHasAlreadyBeenSet);
     }
 }
コード例 #7
0
        private IEdmLabeledExpression WrapLabeledElementList(List <CsdlLabeledExpression> labeledExpressions, IEdmEntityType bindingContext)
        {
            IEdmLabeledExpression expression;

            if (!this.ambiguousLabeledExpressions.TryGetValue(labeledExpressions, out expression))
            {
                foreach (CsdlLabeledExpression expression2 in labeledExpressions)
                {
                    IEdmLabeledExpression second = this.WrapLabeledElement(expression2, bindingContext);
                    expression = (expression == null) ? second : new AmbiguousLabeledExpressionBinding(expression, second);
                }
                this.ambiguousLabeledExpressions[labeledExpressions] = expression;
            }
            return(expression);
        }
        private IEdmLabeledExpression ComputeElement()
        {
            var model = base.Schema.Model;

            if (model == null)
            {
            }
            IEdmLabeledExpression edmLabeledExpression = base.Schema.FindLabeledElement(this.expression.Label, this.bindingContext);

            if (edmLabeledExpression == null)
            {
                return(new UnresolvedLabeledElement(this.expression.Label, base.Location));
            }
            else
            {
                return(edmLabeledExpression);
            }
        }
コード例 #9
0
        private IEdmLabeledExpression WrapLabeledElementList(List <CsdlLabeledExpression> labeledExpressions, IEdmEntityType bindingContext)
        {
            IEdmLabeledExpression result;

            // Guarantee that multiple requests to wrap a given labeled element all return the same object.
            if (!this.ambiguousLabeledExpressions.TryGetValue(labeledExpressions, out result))
            {
                foreach (CsdlLabeledExpression labeledExpression in labeledExpressions)
                {
                    IEdmLabeledExpression wrappedExpression = this.WrapLabeledElement(labeledExpression, bindingContext);
                    result =
                        result == null
                            ? wrappedExpression
                            : new AmbiguousLabeledExpressionBinding(result, wrappedExpression);
                }

                this.ambiguousLabeledExpressions[labeledExpressions] = result;
            }

            return(result);
        }
コード例 #10
0
 internal void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement)
 {
     this.xmlWriter.WriteStartElement(CsdlConstants.Element_LabeledElement);
     this.WriteRequiredAttribute(CsdlConstants.Attribute_Name, labeledElement.Name, EdmValueWriter.StringAsXml);
 }
コード例 #11
0
 protected virtual void ProcessLabeledExpression(IEdmLabeledExpression element)
 {
     this.VisitExpression(element.Expression);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="EdmLabeledExpressionReferenceExpression"/> class.
 /// This constructor will not allow changing <see cref="ReferencedLabeledExpression"/> property after the EdmLabeledExpressionReferenceExpression instance has been constructed.
 /// </summary>
 /// <param name="referencedLabeledExpression">Referenced labeled element.</param>
 public EdmLabeledExpressionReferenceExpression(IEdmLabeledExpression referencedLabeledExpression)
 {
     EdmUtil.CheckArgumentNull(referencedLabeledExpression, "referencedLabeledExpression");
     this.referencedLabeledExpression = referencedLabeledExpression;
 }
コード例 #13
0
 internal abstract void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement);
コード例 #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EdmLabeledExpressionReferenceExpression"/> class.
 /// This constructor will not allow changing <see cref="ReferencedLabeledExpression"/> property after the EdmLabeledExpressionReferenceExpression instance has been constructed.
 /// </summary>
 /// <param name="referencedLabeledExpression">Referenced labeled element.</param>
 public EdmLabeledExpressionReferenceExpression(IEdmLabeledExpression referencedLabeledExpression)
 {
     EdmUtil.CheckArgumentNull(referencedLabeledExpression, "referencedLabeledExpression");
     this.referencedLabeledExpression = referencedLabeledExpression;
 }
コード例 #15
0
 internal void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement)
 {
     this.xmlWriter.WriteStartElement("LabeledElement");
     this.WriteRequiredAttribute <string>("Name", labeledElement.Name, new Func <string, string>(EdmValueWriter.StringAsXml));
 }