private static String descriptionOfExpected(BaseMatcher baseMatcher, Object[] expectArgs) {
    StringBuilder message = new StringBuilder();

    if (baseMatcher.descriptionOfExpected != null) {
      message.append(" <").append(baseMatcher.descriptionOfExpected).append(">");
    } else {
      for (int i = 0; i < expectArgs.length; i++) {
        Object expectArg = expectArgs[i];
        message.append(i == 0 ? " <" : ">, <");

        if (expectArg instanceof Object[]) {
          expectArg = Arrays.asList((Object[]) expectArg);
        }
        message.append(expectArg);
      }
      if (expectArgs.length > 0) message.append(">");
    }

    return message.toString();
  }