static record noeq /*mapMethodLike*/ FunctionCall(Object function, Object... args) implements Transformable/*, IJavaXExpr*/ { sS _fieldOrder = "function args"; // !customConstructor *(Object *function, Object... *args) { if (empty(this.args)) this.args = null; } *(Object function, L args) { this(function, toObjectArray(args)); } toString { ret function + "(" + joinWithComma(allToString(args)) + ")"; } S toStringWithOptionalParens() { ret empty(args) ? str(function) : toString(); } public bool equals(O o) { ret o instanceof FunctionCall && eq(function, o/FunctionCall.function) && objectArraysEqual(args, o/FunctionCall.args); } public int hashCode() { ret hashAboutObjects(function, asList(args)); } L args() { ret asList(args); } public Object transformUsing(IF1 f) { ret new FunctionCall(f.get(function), mapObjectArray(f, args)); } }