code: private Optional<PushDownBooleanExpressionProposal> makeProposal(
              IntermediateQuery currentQuery, JoinOrFilterNode focusNode) {
  
          /**
           * Commutative joins and filters
           */
          if (focusNode instanceof CommutativeJoinOrFilterNode) {
              return makeProposalForJoinOrFilterNode(currentQuery, focusNode, currentQuery.getChildren(focusNode));
          }
          /**
           * Left join: can only push its conditions on the right side
           */
          else if (focusNode instanceof LeftJoinNode) {
              return makeProposalForJoinOrFilterNode(currentQuery, focusNode,
                      ImmutableList.of(currentQuery.getChild(focusNode, RIGHT)
                              .orElseThrow(() -> new IllegalStateException("Was not excepting to find a " +
                                      "LJ without a right element"))));
          }
          /**
           * Other node (useful for extension)
           */
          else {
              return makeProposalForUnexpectedFocusNode(currentQuery, focusNode);
          }
      }
docs: Routing method