@Override
  public String getExprString(boolean sortChildren) {
    if (sortChildren) {
      UDFType udfType = genericUDF.getClass().getAnnotation(UDFType.class);
      if (udfType.commutative()) {
        // Get the sorted children expr strings
        String[] childrenExprStrings = new String[children.size()];
        for (int i = 0; i < childrenExprStrings.length; i++) {
          childrenExprStrings[i] = children.get(i).getExprString();
        }
        return genericUDF.getDisplayString(
            ImmutableSortedMultiset.copyOf(childrenExprStrings).toArray(new String[childrenExprStrings.length]));
      }
    }
    return getExprString();
  }
This class uses a writableObjectInspector rather than a TypeInfo to store
the canonical type information for this NodeDesc.
ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc.java