protected void encodeMarkup(FacesContext context, SelectCheckboxMenu menu) throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    String clientId = menu.getClientId(context);
    List<SelectItem> selectItems = getSelectItems(context, menu);
    boolean valid = menu.isValid();

    String style = menu.getStyle();
    String styleclass = menu.getStyleClass();
    styleclass =
        styleclass == null
            ? SelectCheckboxMenu.STYLE_CLASS
            : SelectCheckboxMenu.STYLE_CLASS + " " + styleclass;
    styleclass = menu.isDisabled() ? styleclass + " ui-state-disabled" : styleclass;
    styleclass = !valid ? styleclass + " ui-state-error" : styleclass;

    writer.startElement("div", menu);
    writer.writeAttribute("id", clientId, "id");
    writer.writeAttribute("class", styleclass, "styleclass");
    if (style != null) {
      writer.writeAttribute("style", style, "style");
    }

    encodeInputs(context, menu, selectItems);
    encodeLabel(context, menu, selectItems, valid);
    encodeMenuIcon(context, menu, valid);

    writer.endElement("div");
  }