class TriConstraintBuilderImpl<A, B, C, Score_ extends Score<Score_>>
        extends AbstractConstraintBuilder<Score_>
        implements TriConstraintBuilder<A, B, C, Score_> {

    private QuadFunction<A, B, C, Score_, ConstraintJustification> justificationMapping;
    private TriFunction<A, B, C, Collection<Object>> indictedObjectsMapping;

    public TriConstraintBuilderImpl(TriConstraintConstructor<A, B, C, Score_> constraintConstructor, ScoreImpactType impactType,
            Score_ constraintWeight) {
        super(constraintConstructor, impactType, constraintWeight);
    }

    @Override
    protected QuadFunction<A, B, C, Score_, ConstraintJustification> getJustificationMapping() {
        return justificationMapping;
    }

    @Override
    public <ConstraintJustification_ extends ConstraintJustification> TriConstraintBuilder<A, B, C, Score_> justifyWith(
            QuadFunction<A, B, C, Score_, ConstraintJustification_> justificationMapping) {
        if (this.justificationMapping != null) {
            throw new IllegalStateException("Justification mapping already set (" + justificationMapping + ").");
        }
        this.justificationMapping =
                (QuadFunction<A, B, C, Score_, ConstraintJustification>) Objects.requireNonNull(justificationMapping);
        return this;
    }

    @Override
    protected TriFunction<A, B, C, Collection<Object>> getIndictedObjectsMapping() {
        return indictedObjectsMapping;
    }

    @Override
    public TriConstraintBuilder<A, B, C, Score_> indictWith(TriFunction<A, B, C, Collection<Object>> indictedObjectsMapping) {<FILL_FUNCTION_BODY>}

}

        if (this.indictedObjectsMapping != null) {
            throw new IllegalStateException("Indicted objects' mapping already set (" + indictedObjectsMapping + ").");
        }
        this.indictedObjectsMapping = Objects.requireNonNull(indictedObjectsMapping);
        return this;
    
<methods>public final org.optaplanner.core.api.score.stream.Constraint asConstraint(java.lang.String) ,public final org.optaplanner.core.api.score.stream.Constraint asConstraint(java.lang.String, java.lang.String) <variables>private final non-sealed ConstraintConstructor#RAW constraintConstructor,private final non-sealed Score_ constraintWeight,private final non-sealed org.optaplanner.constraint.streams.common.ScoreImpactType impactType