boolean applyCustomizations(@NotNull TBItemAnActionButton button, @NotNull Presentation presentation) {
    final @Nullable ActionGroupInfo parentInfo = myAct2Parent.get(button.getAnAction());
    boolean result = false;

    // 1. apply base customizations
    if (!myBaseCustomizers.isEmpty()) {
      result = true;
      for (ItemCustomizer c : myBaseCustomizers) {
        c.applyCustomizations(parentInfo, button, presentation);
      }
    }

    // 2. apply per-action customizations
    final List<ItemCustomizer> customizers = myAct2ButtCustomizer.get(button.getAnAction());
    if (customizers != null && !customizers.isEmpty()) {
      result = true;
      for (ItemCustomizer c : customizers) {
        c.applyCustomizations(parentInfo, button, presentation);
      }
    }

    // 3. apply per-group customizations
    ActionGroupInfo p = parentInfo;
    while (p != null) {
      final List<ItemCustomizer> cs = myGroupCustomizers.get(p.group);
      if (cs != null && !cs.isEmpty()) {
        result = true;
        for (ItemCustomizer c : cs) {
          c.applyCustomizations(parentInfo, button, presentation); // apply with direct parent info (direct parent contains view-descriptors)
        }
      }
      p = p.parent;
    }

    return result;
  }
boolean applyCustomizations(@NotNull TBItemAnActionButton button, @NotNull Presentation presentation)