public AstParserScopeManager Clone() { AstParserScopeManager clone = new AstParserScopeManager(); clone._PathTracker = new Stack<AstNode>(_PathTracker); clone._ScopeTracker = new Stack<AstNode>(_ScopeTracker); return clone; }
private bool BindASTNodeReference(BindingItem item) { Type t = item.BoundProperty.PropertyType; if (IsContainerOf(typeof(ICollection <object>), t)) { t = t.GetGenericArguments()[0]; } string value = item.XValue; AstNode boundASTNode = null; AstParserScopeManager scopeManager = item.ScopeManager.Clone(); // Walk scopes while (boundASTNode == null && !scopeManager.IsEmpty) { boundASTNode = FindASTNode(t, scopeManager.GetScopedName(value)); scopeManager.Pop(); } // Attempt scopeless binding if (boundASTNode == null) { boundASTNode = FindASTNode(t, value); } if (boundASTNode != null) { BindProperty(item.BoundProperty, item.ParentASTNode, boundASTNode, item.XObject, true); return(true); } return(false); }
public NewBindingItem(XmlIRDocumentType docType, XObject XObject, string XValue, AstNamedNode ParentASTNode, AstParserScopeManager scopeManager) { this.docType = docType; this.XObject = XObject; this.XValue = XValue; this.node = ParentASTNode; this.ScopeManager = scopeManager; }
public BindingItem(PropertyInfo BoundProperty, XObject XObject, string XValue, AstNode ParentASTNode, AstParserScopeManager scopeManager) { this.BoundProperty = BoundProperty; this.XObject = XObject; this.XValue = XValue; this.ParentASTNode = ParentASTNode; this.ScopeManager = scopeManager; }
public AstParserScopeManager Clone() { AstParserScopeManager clone = new AstParserScopeManager(); clone._PathTracker = new Stack <AstNode>(_PathTracker); clone._ScopeTracker = new Stack <AstNode>(_ScopeTracker); return(clone); }
private bool FindASTNodeReferenceForNewObject(XmlIR xmlIR, NewBindingItem item) { Type t = item.node.GetType(); if (IsContainerOf(typeof(ICollection <object>), t)) { t = t.GetGenericArguments()[0]; } string value = item.XValue; AstNode boundASTNode = null; AstParserScopeManager scopeManager = item.ScopeManager.Clone(); // Walk scopes while (boundASTNode == null && !scopeManager.IsEmpty) { boundASTNode = FindASTNode(t, scopeManager.GetScopedName(value)); scopeManager.Pop(); } // Attempt scopeless binding if (boundASTNode == null) { boundASTNode = FindASTNode(t, value); } if (boundASTNode != null) { XElement xElement = new XElement((XElement)boundASTNode.BoundXElement); XmlSchemaObject schemaObject = ((XElement)boundASTNode.BoundXElement).GetSchemaInfo().SchemaElement; xElement.SetAttributeValue("AsClassOnly", false); xElement.SetAttributeValue("Name", item.node.Name); Dictionary <string, string> dictParams = new Dictionary <string, string>(); foreach (XElement param in xElement.Elements(XName.Get("Argument", GetDefaultXMLNamespace(boundASTNode)))) { string sParam = param.Attribute("Name").Value; XAttribute xAttribute = (item.node.BoundXElement as XElement). Element(XName.Get("New", GetDefaultXMLNamespace(item.node))).Attribute(sParam); if (xAttribute != null) { dictParams.Add("{argument(" + sParam + ")}", xAttribute.Value); } else { dictParams.Add("{argument(" + sParam + ")}", param.Attribute("DefaultValue").Value); } } ReplaceParameters(xElement, dictParams); xmlIR.ValidateXElement(schemaObject, xElement); parseElement(xElement, item.node, item.docType); return(true); } return(false); }
public XmlToAstParserPhase(string WorkflowUniqueName, string DefaultXmlNamespace) { this._DefaultXmlNamespace = DefaultXmlNamespace; this._DefaultXmlNamespacesByASTNodeType = new Dictionary <Type, string>(); this._ScopeManager = new AstParserScopeManager(); this._Loader = new PluginLoader <AstNode, AstSchemaTypeBindingAttribute>(Settings.Default.SubpathAstPluginFolder, 1, 2); this._ASTNodeTypesDictionary = new Dictionary <XmlQualifiedName, Type>(); this.CopyPluginLoaderDataToASTNodeTypes(this._Loader); this._PropertyMappingDictionary = new Dictionary <Type, Dictionary <XName, PropertyBindingAttributePair> >(); this._GlobalASTNamedNodeDictionary = new Dictionary <Type, Dictionary <string, AstNamedNode> >(); this.PreLoadPropertyMappingsAndGlobalDictionary(); this._UnmappedProperties = new Dictionary <XName, List <AstNode> >(); this._LateBindingItems = new List <BindingItem>(); this._NewObjectItems = new List <NewBindingItem>(); }
public XmlToAstParserPhase(string WorkflowUniqueName, string DefaultXmlNamespace) { this._DefaultXmlNamespace = DefaultXmlNamespace; this._DefaultXmlNamespacesByASTNodeType = new Dictionary<Type, string>(); this._ScopeManager = new AstParserScopeManager(); this._Loader = new PluginLoader<AstNode, AstSchemaTypeBindingAttribute>(Settings.Default.SubpathAstPluginFolder, 1, 2); this._ASTNodeTypesDictionary = new Dictionary<XmlQualifiedName, Type>(); this.CopyPluginLoaderDataToASTNodeTypes(this._Loader); this._PropertyMappingDictionary = new Dictionary<Type, Dictionary<XName, PropertyBindingAttributePair>>(); this._GlobalASTNamedNodeDictionary = new Dictionary<Type, Dictionary<string, AstNamedNode>>(); this.PreLoadPropertyMappingsAndGlobalDictionary(); this._UnmappedProperties = new Dictionary<XName, List<AstNode>>(); this._LateBindingItems = new List<BindingItem>(); this._NewObjectItems = new List<NewBindingItem>(); }