code: @Override
      public NodeCentricOptimizationResults<JoinOrFilterNode> apply(PushDownBooleanExpressionProposal proposal,
                                                                    IntermediateQuery query,
                                                                    QueryTreeComponent treeComponent)
              throws InvalidQueryOptimizationProposalException {
          JoinOrFilterNode focusNode = proposal.getFocusNode();
  
          for (Map.Entry<CommutativeJoinOrFilterNode, Collection<ImmutableExpression>> targetEntry : proposal.getNewDirectRecipientNodes().asMap().entrySet()) {
              updateNewDirectRecipientNode(treeComponent, targetEntry.getKey(), targetEntry.getValue());
          }
  
          for (Map.Entry<QueryNode, Collection<ImmutableExpression>> targetEntry :
                  proposal.getIndirectRecipientNodes().asMap().entrySet()) {
              updateIndirectRecipientNode(treeComponent, targetEntry.getKey(), targetEntry.getValue());
          }
  
          QueryNode firstChild = query.getFirstChild(focusNode)
                  .orElseThrow(() -> new InvalidQueryOptimizationProposalException("The focus node has no child"));
  
          return updateFocusNode(treeComponent, focusNode, proposal.getExpressionsToKeep())
                  .map(n -> new NodeCentricOptimizationResultsImpl<>(query, n))
                  .orElseGet(() -> new NodeCentricOptimizationResultsImpl<>(query, Optional.of(firstChild)));
      }
docs: TODO: explain