@Contract(pure = true)
  public static @NotNull <T> OptDropdown dropdown(@Language("jvm-field-name") @NotNull String bindId,
                                                  @NotNull @NlsContexts.Label String splitLabel,
                                                  @NotNull Collection<T> values,
                                                  @NotNull Function<? super T, @NotNull @NonNls String> keyExtractor,
                                                  @NotNull Function<? super T, @NotNull @Nls String> presentableTextExtractor) {
    return new OptDropdown(bindId, new PlainMessage(splitLabel),
                           ContainerUtil.map(values, c -> option(keyExtractor.apply(c), presentableTextExtractor.apply(c))));
  }
@Contract(pure = true)
  public static @NotNull <T> OptDropdown dropdown(@Language("jvm-field-name") @NotNull String bindId,
                                                  @NotNull @NlsContexts.Label String splitLabel,
                                                  @NotNull Collection<T> values,
                                                  @NotNull Function<? super T, @NotNull @NonNls String> keyExtractor,
                                                  @NotNull Function<? super T, @NotNull @Nls String> presentableTextExtractor)