public override PropertyTreeMetaObject StartStep(PropertyTreeMetaObject target, PropertyTreeNavigator self, NodeList children)
            {
                foreach (var child in children.Rest()) {

                    string msg;
                    if (target.ComponentType.IsHiddenUX()) {
                        msg = SR.BinderMissingPropertyNoType(child.QualifiedName);
                    } else {
                        msg = SR.BinderMissingProperty(child.QualifiedName, target.ComponentType);
                    }

                    try {
                        var info = new InterfaceUsageInfo(InterfaceUsage.Missing, msg, null, true);
                        Parent.Callback.OnPropertyAnnotation(child.QualifiedName.ToString(), info);

                    } catch (Exception ex) {
                        if (ex.IsCriticalException())
                            throw;

                        throw PropertyTreesFailure.UnmatchedMembersGenericError(ex, child.FileLocation);
                    }
                }

                return target;
            }
        void _OnPropertyAnnotation(string property, InterfaceUsageInfo usageInfo)
        {
            if (usageInfo == null)
                throw new ArgumentNullException("usageInfo"); // $NON-NLS-1

            switch (usageInfo.Usage) {
                case InterfaceUsage.Missing:
                    throw PropertyTreesFailure.BinderMissingProperty(usageInfo);

                case InterfaceUsage.Obsolete:
                case InterfaceUsage.Preliminary:
                    if (usageInfo.IsError)
                        throw PropertyTreesFailure.BinderObsoleteProperty(usageInfo);

                    break;
            }
        }
            public void OnEventAnnotation(string @event, InterfaceUsageInfo usageInfo)
            {
                if (usageInfo.IsError) {
                    switch (usageInfo.Usage) {
                        case InterfaceUsage.Missing:
                            throw RuntimeFailure.EventMissing(@event);

                        case InterfaceUsage.Obsolete:
                            throw RuntimeFailure.EventObsolete(@event, usageInfo.Message);

                        case InterfaceUsage.Preliminary:
                            throw RuntimeFailure.EventPreliminary(@event, usageInfo.Message);

                        case InterfaceUsage.Unspecified:
                        default:
                            break;
                    }

                }
            }
 public static PropertyTreeException BinderObsoleteProperty(InterfaceUsageInfo usageInfo)
 {
     return Failure.Prepare(new PropertyTreeException(usageInfo.Message) {
                                HelpLink = Convert.ToString(usageInfo.HelpUri),
                            });
 }
 public void OnPropertyAnnotation(string property, InterfaceUsageInfo usageInfo)
 {
 }
 public void OnEventAnnotation(string @event, InterfaceUsageInfo usageInfo)
 {
 }
            public void OnPropertyAnnotation(string property, InterfaceUsageInfo usageInfo)
            {
                if (usageInfo.IsError) {
                    switch (usageInfo.Usage) {
                        case InterfaceUsage.Missing:
                            throw RuntimeFailure.PropertyMissing(property);

                        case InterfaceUsage.Obsolete:
                            throw RuntimeFailure.PropertyObsolete(property, usageInfo.Message);

                        case InterfaceUsage.Preliminary:
                            throw RuntimeFailure.PropertyPreliminary(property, usageInfo.Message);

                        case InterfaceUsage.Unspecified:
                        default:
                            break;
                    }

                }
            }
 public void OnEventAnnotation(string @event, InterfaceUsageInfo usageInfo)
 {
     _OnPropertyAnnotation(@event, usageInfo);
 }