code: protected TreeBuilder createTreeBuilder(Properties properties, Feature... features) {
  		Class<?> clazz = load(TreeBuilder.class, properties);
  		if (clazz == null) {
  			return new Builder(features);
  		}
  		try {
  			if (Builder.class.isAssignableFrom(clazz)) {
  				Constructor<?> constructor = clazz.getConstructor(Feature[].class);
  				if (constructor == null) {
  					if (features == null || features.length == 0) {
  						return TreeBuilder.class.cast(clazz.newInstance());
  					} else {
  						throw new ELException("Builder " + clazz + " is missing constructor (can't pass features)");
  					}
  				} else {
  					return TreeBuilder.class.cast(constructor.newInstance((Object) features));
  				}
  			} else {
  				return TreeBuilder.class.cast(clazz.newInstance());
  			}
  		} catch (Exception e) {
  			throw new ELException("TreeBuilder " + clazz + " could not be instantiated", e);
  		}
  	}
docs: Create the factory's builder. This implementation takes the
  <code>de.odysseus.el.tree.TreeBuilder</code> property as a name of a class implementing the
  <code>de.odysseus.el.tree.TreeBuilder</code> interface. If the property is not set, a plain
  <code>de.odysseus.el.tree.impl.Builder</code> is used. If the configured class is a subclass
  of <code>de.odysseus.el.tree.impl.Builder</code> and which provides a constructor taking an
  array of <code>Builder.Feature</code>, this constructor will be invoked. Otherwise, the
  default constructor will be used.