String (boolean withReturnType, boolean withParentheses, @NotNull Function<? super String, String> transformation) { final StringJoiner joiner = new StringJoiner(", ", withParentheses ? "(" : "", withParentheses ? ")" : ""); if (withReturnType) { joiner.add(transformation.apply(myReturnType)); } for (String argumentType : myArgumentTypes) { joiner.add(transformation.apply(argumentType)); } return joiner.toString(); }