code: public final Object make(Parameterization config) {
      if(state != STATE_FRESH) {
        throw new AbortException("Parameterizers may only be used once!");
      }
      state = STATE_INIT;
  
      Object owner = this.getClass().getDeclaringClass();
      config = config.descend(owner == null ? this : owner);
      makeOptions(config);
  
      if(!config.hasErrors()) {
        state = STATE_COMPLETE;
        Object ret = makeInstance();
        if(ret == null) {
          throw new AbortException("makeInstance() returned null!", new Throwable());
        }
        return ret;
      }
      else {
        state = STATE_ERRORS;
        return null;
      }
    }
docs: Method to configure a class, then instantiate when the configuration step
  was successful.
  <p>
  <b>Don't call this directly use unless you know what you are doing.<br>
  Instead, use {@link Parameterization#tryInstantiate(Class)}!</b>
  <p>
  Otherwise, {@code null} will be returned, and the resulting errors can be
  retrieved from the {@link Parameterization} parameter object. In general,
  you should be checking the {@link Parameterization} object for errors
  before accessing the returned value, since it may be {@code null}
  unexpectedly otherwise.
  
  @param config Parameterization
  @return Instance or {@code null}