code: private Optional<PushDownBooleanExpressionProposal> makeProposalForJoinOrFilterNode(
              IntermediateQuery currentQuery, JoinOrFilterNode providerNode, ImmutableList<QueryNode> preSelectedChildren) {
  
          /*
           * If there is no boolean expression, no proposal
           */
          Optional<ImmutableExpression> optionalNestedExpression = providerNode.getOptionalFilterCondition();
  
          if (!optionalNestedExpression.isPresent()) {
              return Optional.empty();
          }
  
          /*
           * Decomposes the boolean expressions as much as possible (conjunction)
           */
          ImmutableSet<ImmutableExpression> booleanExpressions = optionalNestedExpression.get().flattenAND();
  
          /*
           * For each boolean expression, looks for recipients.
           */
          ImmutableMultimap<Recipient, ImmutableExpression> recipientMap = booleanExpressions.stream()
                  .flatMap(ex -> selectPushes(currentQuery, providerNode, preSelectedChildren, ex))
                  .collect(ImmutableCollectors.toMultimap(
                          p -> p.recipient,
                          p -> p.expression));
  
          return buildProposal(providerNode, recipientMap);
      }
docs: providerNode: provides the boolean expressions