/// <summary> /// Visits the specified alias for type. /// </summary> /// <param name="aliasForType">Type of the alias for.</param> public virtual void Visit(IAliasForType aliasForType) //^ ensures this.path.Count == old(this.path.Count); { if (this.stopTraversal) return; //^ int oldCount = this.path.Count; this.path.Push(aliasForType); this.Visit(aliasForType.AliasedType); this.Visit(aliasForType.Attributes); //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not decrease this.path.Count. this.path.Pop(); aliasForType.Dispatch(this); }
/// <summary> /// Traverses the alias for type. /// </summary> public void Traverse(IAliasForType aliasForType) { aliasForType.Dispatch(this.dispatchingVisitor); }
/// <summary> /// Visits the specified alias for type. /// </summary> public virtual void Visit(IAliasForType aliasForType) { //IAliasForType is a base interface that should never be implemented directly. //Get aliasForType to call the most type specific visitor. aliasForType.Dispatch(this); }
/// <summary> /// Visits the specified alias for type. /// </summary> /// <param name="aliasForType">Type of the alias for.</param> public virtual void Visit(IAliasForType aliasForType) { this.Visit(aliasForType.AliasedType); this.Visit(aliasForType.GetAttributes(Context)); aliasForType.Dispatch(this); }
/// <summary> /// Visits the specified alias for type. /// </summary> /// <param name="aliasForType">Type of the alias for.</param> public virtual void Visit(IAliasForType aliasForType) { // IAliasForType is a base interface that should never be implemented directly. // Get aliasForType to call the most type specific visitor. aliasForType.Dispatch(this); }