void StateInspector.IEventsVisitor.Visit(StateInspector.PropertyChange propertyChange)
        {
            if (inspectedObjectsFilter(propertyChange))
            {
                InspectedObject inspectedObject = EnsureInspectedObjectExists(propertyChange);

                if (propertyChange.ObjectType.PrimaryPropertyName != null &&
                    propertyChange.ObjectType.PrimaryPropertyName == propertyChange.PropertyName)
                {
                    inspectedObject.Milestones.Add(new Timeline.ObjectLifetimeEvent(
                                                       propertyChange.Trigger,
                                                       string.Format("{0}.{1}->{2}", propertyChange.ObjectId, propertyChange.PropertyName, propertyChange.Value),
                                                       propertyChange.ObjectId,
                                                       ActivityEventType.Milestone
                                                       ));
                }

                inspectedObject.Tags.UnionWith(propertyChange.Tags);

                if (propertyChange.ObjectType.DisplayIdPropertyName != null &&
                    inspectedObject.DisplayId == null &&
                    propertyChange.ObjectType.DisplayIdPropertyName == propertyChange.PropertyName)
                {
                    if (propertyChange.ValueType == SI.ValueType.UserHash)
                    {
                        inspectedObject.DisplayId = string.Format("<uh>{0}</uh>", propertyChange.Value);
                    }
                    else
                    {
                        inspectedObject.DisplayId = propertyChange.Value;
                    }
                    inspectedObject.YieldPendingEvents(resultEvents);
                }
            }
        }
 void StateInspector.IEventsVisitor.Visit(StateInspector.ObjectDeletion objectDeletion)
 {
     if (inspectedObjectsFilter(objectDeletion))
     {
         InspectedObject inspectedObject = EnsureInspectedObjectExists(objectDeletion);
         inspectedObjects.Remove(objectDeletion.ObjectId);
         inspectedObject.YieldPendingEvents(resultEvents);
         resultEvents.Enqueue(inspectedObject.AddTags(new Timeline.ObjectLifetimeEvent(
                                                          objectDeletion.Trigger,
                                                          inspectedObject.MakeActivityDisplayName(),
                                                          inspectedObject.Id,
                                                          ActivityEventType.End)));
     }
 }