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)); } }
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); }
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)); }
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); } }
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); } }
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); } }
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); } }
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); }
internal void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement) { this.xmlWriter.WriteStartElement(CsdlConstants.Element_LabeledElement); this.WriteRequiredAttribute(CsdlConstants.Attribute_Name, labeledElement.Name, EdmValueWriter.StringAsXml); }
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; }
internal abstract void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement);
internal void WriteLabeledElementHeader(IEdmLabeledExpression labeledElement) { this.xmlWriter.WriteStartElement("LabeledElement"); this.WriteRequiredAttribute <string>("Name", labeledElement.Name, new Func <string, string>(EdmValueWriter.StringAsXml)); }