class ForwardingLogicalPlan implements LogicalPlan {

    private final List<LogicalPlan> sources;
    final LogicalPlan source;

    public ForwardingLogicalPlan(LogicalPlan source) {
        this.source = source;
        this.sources = List.of(source);
    }

    public LogicalPlan source() {
        return source;
    }

    @Override
    public LogicalPlan pruneOutputsExcept(SequencedCollection<Symbol> outputsToKeep) {<FILL_FUNCTION_BODY>}

    @Override
    public List<Symbol> outputs() {
        return source.outputs();
    }

    @Override
    public List<RelationName> relationNames() {
        return source.relationNames();
    }

    @Override
    public List<LogicalPlan> sources() {
        return sources;
    }

    @Override
    public Map<LogicalPlan, SelectSymbol> dependencies() {
        return source.dependencies();
    }

    @Override
    public boolean supportsDistributedReads() {
        return source.supportsDistributedReads();
    }
}

        LogicalPlan newSource = source.pruneOutputsExcept(outputsToKeep);
        if (newSource == source) {
            return this;
        }
        return replaceSources(List.of(newSource));
    
<no_super_class>