public ReflectedPropertyTreeDefinition(Type type)
        {
            this.type = type;
            this.operators = new OperatorDefinitionCollection();

            if (type.IsAbstract) {

                // Composable providers can be abstract
                if (type.IsProviderType() && type.IsDefined(typeof(ComposableAttribute), false)) {

                    var composeMember = AppDomain.CurrentDomain.GetProviderMember(type, "compose");
                    if (composeMember == null)
                        throw new NotImplementedException();

                    this.activationConstructor = ReflectedProviderFactoryDefinitionBase.Create(type, composeMember);
                }

            } else {
                MethodBase ctor = TypeHelper.FindActivationConstructor(type);
                if (ctor != null) {
                    this.activationConstructor = ReflectedPropertyTreeFactoryDefinition.Create(null, ctor);
                }
            }
        }
 protected internal virtual void VisitPropertyTreeFactory(PropertyTreeFactoryDefinition node)
 {
     DefaultVisit(node);
 }