class Classification {

        private final Set<String> labels;
        private final Plan.StatementType type;

        public Classification(Plan.StatementType type, Set<String> labels) {
            this.type = type;
            this.labels = labels;
        }

        public Classification(Plan.StatementType type) {
            this.type = type;
            this.labels = Collections.emptySet();
        }

        public Set<String> labels() {
            return labels;
        }

        public Plan.StatementType type() {
            return type;
        }

        @Override
        public String toString() {<FILL_FUNCTION_BODY>}

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Classification that = (Classification) o;
            return Objects.equals(labels, that.labels) &&
                   type == that.type;
        }

        @Override
        public int hashCode() {
            return Objects.hash(labels, type);
        }
    }

            return "Classification{type=" + type + ", labels=" + labels + "}";
        
<methods>public non-sealed void <init>() ,public java.lang.Void visitCollect(io.crate.planner.operators.Collect, Set<java.lang.String>) ,public java.lang.Void visitCorrelatedJoin(io.crate.planner.operators.CorrelatedJoin, Set<java.lang.String>) ,public java.lang.Void visitCount(io.crate.planner.operators.Count, Set<java.lang.String>) ,public java.lang.Void visitEval(io.crate.planner.operators.Eval, Set<java.lang.String>) ,public java.lang.Void visitFetch(io.crate.planner.operators.Fetch, Set<java.lang.String>) ,public java.lang.Void visitFilter(io.crate.planner.operators.Filter, Set<java.lang.String>) ,public java.lang.Void visitForeignCollect(io.crate.planner.operators.ForeignCollect, Set<java.lang.String>) ,public java.lang.Void visitGet(io.crate.planner.operators.Get, Set<java.lang.String>) ,public java.lang.Void visitGroupHashAggregate(io.crate.planner.operators.GroupHashAggregate, Set<java.lang.String>) ,public java.lang.Void visitGroupReference(io.crate.planner.optimizer.iterative.GroupReference, Set<java.lang.String>) ,public java.lang.Void visitHashAggregate(io.crate.planner.operators.HashAggregate, Set<java.lang.String>) ,public java.lang.Void visitHashJoin(io.crate.planner.operators.HashJoin, Set<java.lang.String>) ,public java.lang.Void visitInsert(io.crate.planner.operators.Insert, Set<java.lang.String>) ,public java.lang.Void visitInsert(io.crate.planner.operators.InsertFromValues, Set<java.lang.String>) ,public java.lang.Void visitJoinPlan(io.crate.planner.operators.JoinPlan, Set<java.lang.String>) ,public java.lang.Void visitLimit(io.crate.planner.operators.Limit, Set<java.lang.String>) ,public java.lang.Void visitLimitDistinct(io.crate.planner.operators.LimitDistinct, Set<java.lang.String>) ,public java.lang.Void visitMultiPhase(io.crate.planner.operators.MultiPhase, Set<java.lang.String>) ,public java.lang.Void visitNestedLoopJoin(io.crate.planner.operators.NestedLoopJoin, Set<java.lang.String>) ,public java.lang.Void visitOrder(io.crate.planner.operators.Order, Set<java.lang.String>) ,public java.lang.Void visitPlan(io.crate.planner.operators.LogicalPlan, Set<java.lang.String>) ,public java.lang.Void visitProjectSet(io.crate.planner.operators.ProjectSet, Set<java.lang.String>) ,public java.lang.Void visitRename(io.crate.planner.operators.Rename, Set<java.lang.String>) ,public java.lang.Void visitRootRelationBoundary(io.crate.planner.operators.RootRelationBoundary, Set<java.lang.String>) ,public java.lang.Void visitTableFunction(io.crate.planner.operators.TableFunction, Set<java.lang.String>) ,public java.lang.Void visitUnion(io.crate.planner.operators.Union, Set<java.lang.String>) ,public java.lang.Void visitWindowAgg(io.crate.planner.operators.WindowAgg, Set<java.lang.String>) <variables>