code: public TreeNode<String> expand(final Map<String, Tree<String, ?>> variables) {
  		return expand(variables, Function.identity());
  	}
docs: Expands {@code this} pattern with the given variable mapping.
  
  @param variables the variables to use for expanding {@code this} pattern
  @return the expanded tree pattern
  @throws NullPointerException if the variables mapping is {@code null}
  @throws IllegalArgumentException if not all needed variables are part
  of the {@code variables} map