code: @Override
      public IQTree liftBinding(ImmutableList<IQTree> initialChildren, VariableGenerator variableGenerator,
                                IQProperties currentIQProperties) {
          IQTree newParentTree = propagateDownCondition(Optional.empty(), initialChildren);
  
          /*
           * If after propagating down the condition the root is still a join node, goes to the next step
           */
          if (newParentTree.getRootNode() instanceof InnerJoinNodeImpl) {
              return ((InnerJoinNodeImpl)newParentTree.getRootNode()).liftBindingAfterPropagatingCondition(
                      newParentTree.getChildren(), variableGenerator, currentIQProperties);
          }
          else
              /*
               * Otherwise, goes back to the general method
               */
              return newParentTree.liftBinding(variableGenerator);
      }
docs: TODO: explain