Como eu diminuo a complexidade ciclomática deste código por exemplo: a finalidade dele é habilitar um botão validar (exibí-lo ou não).
  public boolean habilitaBotaoValidar() {
    if (listaPostoDeTrabalhoSelecionado != null) {
      for (PostoDeTrabalho posto : listaPostoDeTrabalhoSelecionado) {
        if (posto != null && posto.getListaPessoaDTO() != null) {
          for (PessoaDTO pessoaDTO : posto.getListaPessoaDTO()) {
            if (pessoaDTO != null && pessoaDTO.getListaRetencao() != null) {
              for (Retencao re : pessoaDTO.getListaRetencao()) {
                if (re != null && re.getDataValidouRetencao() == null
                    && re.getDataAprovouRetencao() == null) {
                  return true;
                }
              }
            }
          }
        }
      }
    }
    return false;
  }
                                <p:column headerText="Ação" style="text-align: center;">
                                    <p:commandButton actionListener="#{validarRetencaoAction.selecionar(pessoaDTO, retencao)}" icon="ui-icon-refresh" update="@all" process="@all" 
                                                title="Recalcular" disabled="#{validarRetencaoAction.habilitaBotaoValidar() eq false or retencao.dataValidouRetencao ne null}" />
                                </p:column>
O valor da complexidade está em 15.
Em outra parte do código, tbm estou com o mesmo problema:
            <p:commandButton action="#{validarRetencaoAction.validar()}" icon="ui-icon-check" value="Validar" update="@all" style="float: left;" disabled="#{validarRetencaoAction.habilitaBotaoValidar() eq false}">
                <p:confirm header="Confirmação" message="Validar esta retenção?" icon="ui-icon-alert" style="position: absolute; top: 50px !important"/>
            </p:commandButton>
  public void validar() throws Exception {
    Usuario usuarioLogado = new Usuario(usuarioSessao.getLogin());
    Date dataAtual = new Date();
    if (listaPostoDeTrabalhoSelecionado != null) {
      for (PostoDeTrabalho posto : listaPostoDeTrabalhoSelecionado) {
        if (posto != null && posto.getListaPessoaDTO() != null) {
          for (PessoaDTO pessoaDTO : posto.getListaPessoaDTO()) {
            if (pessoaDTO != null && pessoaDTO.getListaRetencao() != null) {
              for (Retencao re : pessoaDTO.getListaRetencao()) {
                if (re != null && re.getDataValidouRetencao() == null
                    && re.getDataAprovouRetencao() == null) {
                  re.setDataValidouRetencao(dataAtual);
                  re.setUsuarioValidouRetencao(usuarioLogado);
                  retencaoDAO.merge(re);
                }
              }
            }
          }
        }
      }
      ...
    }
  }
Se alguém puder dar sugestão de como melhorar, obrigado!