Code review comment: @jackwener say all what i want say

Code under review:
public PlanFragment visitPhysicalProject(PhysicalProject<? extends Plan> project, PlanTranslatorContext context) {
        PlanFragment inputFragment = project.child(0).accept(this, context);

        List<Expr> execExprList = project.getProjects()
                .stream()
                .map(e -> ExpressionTranslator.translate(e, context))
                .collect(Collectors.toList());
        
        List<Slot> slotList = project.getOutput();
        TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, null, context);
        PlanNode inputPlanNode = inputFragment.getPlanRoot();
        
        
        
        if (inputPlanNode instanceof HashJoinNode) {
            HashJoinNode hashJoinNode = (HashJoinNode) inputPlanNode;
            hashJoinNode.setvOutputTupleDesc(tupleDescriptor);
            hashJoinNode.setvSrcToOutputSMap(execExprList);
            return inputFragment;
        }
        inputPlanNode.setProjectList(execExprList);
        inputPlanNode.setOutputTupleDesc(tupleDescriptor);

        List<Expr> predicateList = inputPlanNode.getConjuncts();
        Set<Integer> requiredSlotIdList = new HashSet<>();
        for (Expr expr : predicateList) {
            extractExecSlot(expr, requiredSlotIdList);
        }
        for (Expr expr : execExprList) {
            extractExecSlot(expr, requiredSlotIdList);
        }
        if (inputPlanNode instanceof OlapScanNode) {
            updateChildSlotsMaterialization(inputPlanNode, requiredSlotIdList, context);
        }
        return inputFragment;
    }

Line commented on: TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, null, context);

Revised code:
public PlanFragment visitPhysicalProject(PhysicalProject<? extends Plan> project, PlanTranslatorContext context) {
        PlanFragment inputFragment = project.child(0).accept(this, context);

        List<Expr> execExprList = project.getProjects()
                .stream()
                .map(e -> ExpressionTranslator.translate(e, context))
                .collect(Collectors.toList());
        
        List<Slot> slotList = project.getOutput();
        TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, null, context);
        PlanNode inputPlanNode = inputFragment.getPlanRoot();
        
        
        
        if (inputPlanNode instanceof HashJoinNode) {
            HashJoinNode hashJoinNode = (HashJoinNode) inputPlanNode;
            hashJoinNode.setvOutputTupleDesc(tupleDescriptor);
            hashJoinNode.setvSrcToOutputSMap(execExprList);
            return inputFragment;
        }
        inputPlanNode.setProjectList(execExprList);
        inputPlanNode.setOutputTupleDesc(tupleDescriptor);

        List<Expr> predicateList = inputPlanNode.getConjuncts();
        Set<Integer> requiredSlotIdList = new HashSet<>();
        for (Expr expr : predicateList) {
            extractExecSlot(expr, requiredSlotIdList);
        }
        for (Expr expr : execExprList) {
            extractExecSlot(expr, requiredSlotIdList);
        }
        if (inputPlanNode instanceof OlapScanNode) {
            updateChildSlotsMaterialization(inputPlanNode, requiredSlotIdList, context);
        }
        return inputFragment;
    }