Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilReplaceVisitor.cs / 1 / QilReplaceVisitor.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Xml.Xsl; namespace System.Xml.Xsl.Qil { ////// Base internal class for visitors that replace the graph as they visit it. /// internal abstract class QilReplaceVisitor : QilVisitor { protected QilFactory f; public QilReplaceVisitor(QilFactory f) { this.f = f; } //----------------------------------------------- // QilVisitor overrides //----------------------------------------------- ////// Visit all children of "parent", replacing each child with a copy of each child. /// protected override QilNode VisitChildren(QilNode parent) { XmlQueryType oldParentType = parent.XmlType; bool recalcType = false; // Visit children for (int i = 0; i < parent.Count; i++) { QilNode oldChild = parent[i], newChild; XmlQueryType oldChildType = oldChild != null ? oldChild.XmlType : null; // Visit child if (IsReference(parent, i)) newChild = VisitReference(oldChild); else newChild = Visit(oldChild); // Only replace child and recalculate type if oldChild != newChild or oldChild.XmlType != newChild.XmlType if (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, newChild.XmlType))) { recalcType = true; parent[i] = newChild; } } if (recalcType) RecalculateType(parent, oldParentType); return parent; } //----------------------------------------------- // QilReplaceVisitor methods //----------------------------------------------- ////// Once children have been replaced, the Xml type is recalculated. /// protected virtual void RecalculateType(QilNode node, XmlQueryType oldType) { XmlQueryType newType; newType = f.TypeChecker.Check(node); // Note the use of AtMost to account for cases when folding of Error nodes in the graph cause // cardinality to be recalculated. // For example, (Sequence (TextCtor (Error "error")) (Int32 1)) => (Sequence (Error "error") (Int32 1)) // In this case, cardinality has gone from More to One Debug.Assert(newType.IsSubtypeOf(XmlQueryTypeFactory.AtMost(oldType, oldType.Cardinality)), "Replace shouldn't relax original type"); node.XmlType = newType; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Xml.Xsl; namespace System.Xml.Xsl.Qil { ////// Base internal class for visitors that replace the graph as they visit it. /// internal abstract class QilReplaceVisitor : QilVisitor { protected QilFactory f; public QilReplaceVisitor(QilFactory f) { this.f = f; } //----------------------------------------------- // QilVisitor overrides //----------------------------------------------- ////// Visit all children of "parent", replacing each child with a copy of each child. /// protected override QilNode VisitChildren(QilNode parent) { XmlQueryType oldParentType = parent.XmlType; bool recalcType = false; // Visit children for (int i = 0; i < parent.Count; i++) { QilNode oldChild = parent[i], newChild; XmlQueryType oldChildType = oldChild != null ? oldChild.XmlType : null; // Visit child if (IsReference(parent, i)) newChild = VisitReference(oldChild); else newChild = Visit(oldChild); // Only replace child and recalculate type if oldChild != newChild or oldChild.XmlType != newChild.XmlType if (!Ref.Equals(oldChild, newChild) || (newChild != null && !Ref.Equals(oldChildType, newChild.XmlType))) { recalcType = true; parent[i] = newChild; } } if (recalcType) RecalculateType(parent, oldParentType); return parent; } //----------------------------------------------- // QilReplaceVisitor methods //----------------------------------------------- ////// Once children have been replaced, the Xml type is recalculated. /// protected virtual void RecalculateType(QilNode node, XmlQueryType oldType) { XmlQueryType newType; newType = f.TypeChecker.Check(node); // Note the use of AtMost to account for cases when folding of Error nodes in the graph cause // cardinality to be recalculated. // For example, (Sequence (TextCtor (Error "error")) (Int32 1)) => (Sequence (Error "error") (Int32 1)) // In this case, cardinality has gone from More to One Debug.Assert(newType.IsSubtypeOf(XmlQueryTypeFactory.AtMost(oldType, oldType.Cardinality)), "Replace shouldn't relax original type"); node.XmlType = newType; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListView.cs
- HttpCapabilitiesEvaluator.cs
- DataGridCommandEventArgs.cs
- Boolean.cs
- MessageDispatch.cs
- IndexExpression.cs
- SelectedCellsChangedEventArgs.cs
- ActivityInfo.cs
- OverlappedAsyncResult.cs
- Helpers.cs
- XsltSettings.cs
- CodeIdentifier.cs
- XmlSerializerSection.cs
- ExceptionValidationRule.cs
- SystemPens.cs
- ContainerTracking.cs
- CompilerTypeWithParams.cs
- InputQueue.cs
- BreakRecordTable.cs
- WebCategoryAttribute.cs
- WebPartCatalogAddVerb.cs
- SqlLiftIndependentRowExpressions.cs
- LongValidator.cs
- MappingItemCollection.cs
- ResourceDictionaryCollection.cs
- ProfileModule.cs
- OleDbWrapper.cs
- ExpressionBuilderContext.cs
- MarkupProperty.cs
- XsdBuilder.cs
- HelloMessage11.cs
- PassportPrincipal.cs
- MimeObjectFactory.cs
- EmptyQuery.cs
- GB18030Encoding.cs
- SmtpFailedRecipientsException.cs
- Stroke2.cs
- BookmarkScopeHandle.cs
- CmsInterop.cs
- TypedDataSourceCodeGenerator.cs
- ToggleButtonAutomationPeer.cs
- DrawListViewItemEventArgs.cs
- COSERVERINFO.cs
- RecordManager.cs
- DataGridViewColumnTypeEditor.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- VisualStyleElement.cs
- CultureSpecificCharacterBufferRange.cs
- ReadOnlyHierarchicalDataSource.cs
- TextDecorationLocationValidation.cs
- _SafeNetHandles.cs
- DataTableMappingCollection.cs
- WebPartZone.cs
- IntegerFacetDescriptionElement.cs
- StorageMappingFragment.cs
- ProvidePropertyAttribute.cs
- EnumerableRowCollectionExtensions.cs
- ImageInfo.cs
- ClientConfigPaths.cs
- XmlDataFileEditor.cs
- FixedFindEngine.cs
- Hashtable.cs
- ToolConsole.cs
- MediaPlayerState.cs
- IntegerFacetDescriptionElement.cs
- HtmlGenericControl.cs
- ItemsChangedEventArgs.cs
- TraceData.cs
- ReadOnlyTernaryTree.cs
- Constants.cs
- ServiceModelExtensionCollectionElement.cs
- OutputBuffer.cs
- UnsafeNativeMethods.cs
- BinaryParser.cs
- ConfigXmlComment.cs
- ViewgenGatekeeper.cs
- GridViewColumn.cs
- HyperLinkColumn.cs
- RelationshipEndCollection.cs
- TransformConverter.cs
- ItemsControlAutomationPeer.cs
- PropertyGroupDescription.cs
- TextEffectCollection.cs
- Viewport2DVisual3D.cs
- XComponentModel.cs
- LeafCellTreeNode.cs
- SelectionEditingBehavior.cs
- MutexSecurity.cs
- DrawingAttributeSerializer.cs
- Matrix3DStack.cs
- HwndSubclass.cs
- DbBuffer.cs
- XPathNode.cs
- SQLGuidStorage.cs
- WmlSelectionListAdapter.cs
- TemplateControlBuildProvider.cs
- KeyboardNavigation.cs
- AnchorEditor.cs
- ObjectTag.cs
- StylusPoint.cs