code: public T build() {
          T obj = createInstance();
          try {
              for (Step step : steps) {
                  if (step.isBuilderMethodCall()) {
                      callMethod(this, step);
                  } else {
                      callMethod(obj, step);
                  }
              }
          } catch (Exception e) {
              throw new Siren4JRuntimeException(e);
          }
          postProcess(obj);
          validate(obj);
          return obj;
      }
docs: Iterates through all of the build steps and uses reflection call the specified method on either the builder itself or
  the component being built. Also calls {@link #postProcess(Object)} and then {@link #validate(Object)}.
  
  @return the newly built component instance, never <code>null</code>.