class DirectPatternVariable<A> extends AbstractPatternVariable<A, A, DirectPatternVariable<A>> {

    DirectPatternVariable(Variable<A> aVariable) {
        this(aVariable, Collections.emptyList());
    }

    DirectPatternVariable(Variable<A> aVariable, List<ViewItem<?>> prerequisiteExpressions) {
        super(aVariable, pattern(aVariable), prerequisiteExpressions, Collections.emptyList());
    }

    DirectPatternVariable(Variable<A> aVariable, ViewItem<?> prerequisiteExpression) {
        this(aVariable, Collections.singletonList(prerequisiteExpression));
    }

    private DirectPatternVariable(DirectPatternVariable<A> patternCreator, ViewItem<?> dependentExpression) {
        super(patternCreator, dependentExpression);
    }

    @Override
    protected A extract(A a) {<FILL_FUNCTION_BODY>}

    @Override
    public DirectPatternVariable<A> addDependentExpression(ViewItem<?> expression) {
        return new DirectPatternVariable<>(this, expression);
    }

}

        return a; // Values of direct variables come straight from the pattern.
    
<methods>public final DirectPatternVariable<A> bind(Variable<BoundVar_>, Function<A,BoundVar_>) ,public final DirectPatternVariable<A> bind(Variable<BoundVar_>, Variable<LeftJoinVar_>, BiFunction<A,LeftJoinVar_,BoundVar_>) ,public final DirectPatternVariable<A> bind(Variable<BoundVar_>, Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>, TriFunction<A,LeftJoinVarA_,LeftJoinVarB_,BoundVar_>) ,public final DirectPatternVariable<A> bind(Variable<BoundVar_>, Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>, Variable<LeftJoinVarC_>, QuadFunction<A,LeftJoinVarA_,LeftJoinVarB_,LeftJoinVarC_,BoundVar_>) ,public final List<ViewItem<?>> build() ,public final DirectPatternVariable<A> filter(Predicate<A>) ,public final DirectPatternVariable<A> filter(BiPredicate<LeftJoinVar_,A>, Variable<LeftJoinVar_>) ,public final DirectPatternVariable<A> filter(TriPredicate<LeftJoinVarA_,LeftJoinVarB_,A>, Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>) ,public final DirectPatternVariable<A> filter(QuadPredicate<LeftJoinVarA_,LeftJoinVarB_,LeftJoinVarC_,A>, Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>, Variable<LeftJoinVarC_>) ,public final DirectPatternVariable<A> filterForJoin(Variable<LeftJoinVar_>, DefaultBiJoiner<LeftJoinVar_,A>, org.optaplanner.core.impl.score.stream.JoinerType, int) ,public final DirectPatternVariable<A> filterForJoin(Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>, DefaultTriJoiner<LeftJoinVarA_,LeftJoinVarB_,A>, org.optaplanner.core.impl.score.stream.JoinerType, int) ,public final DirectPatternVariable<A> filterForJoin(Variable<LeftJoinVarA_>, Variable<LeftJoinVarB_>, Variable<LeftJoinVarC_>, DefaultQuadJoiner<LeftJoinVarA_,LeftJoinVarB_,LeftJoinVarC_,A>, org.optaplanner.core.impl.score.stream.JoinerType, int) ,public List<ViewItem<?>> getDependentExpressions() ,public List<ViewItem<?>> getPrerequisiteExpressions() ,public Variable<A> getPrimaryVariable() <variables>private final non-sealed List<ViewItem<?>> dependentExpressions,private final non-sealed List<ViewItem<?>> prerequisiteExpressions,private final non-sealed Variable<A> primaryVariable