private <T, S extends M> ModelView<? extends T> toView(
     ModelBinding<T> binding,
     ModelRuleDescriptor sourceDescriptor,
     Inputs inputs,
     ModelRuleRegistrar modelRuleRegistrar,
     Class<S> itemType) {
   CollectionBuilder<S> builder =
       new DefaultCollectionBuilder<S>(
           binding.getPath(),
           new Instantiator<S>(itemType, container),
           sourceDescriptor,
           inputs,
           modelRuleRegistrar);
   ModelType<CollectionBuilder<S>> viewType =
       new ModelType.Builder<CollectionBuilder<S>>() {}.where(
               new ModelType.Parameter<S>() {}, ModelType.of(itemType))
           .build();
   CollectionBuilderModelView<S> view =
       new CollectionBuilderModelView<S>(viewType, builder, binding.getPath(), sourceDescriptor);
   @SuppressWarnings("unchecked")
   ModelView<T> cast = (ModelView<T>) view;
   return cast;
 }
 Instantiator(Class<I> defaultType, PolymorphicDomainObjectContainer<? super I> container) {
   this.defaultType = defaultType;
   this.itemType = ModelType.of(defaultType);
   this.container = container;
 }