class FunctionArgument extends Node {

    @Nullable
    private final String name;
    private final ColumnType<?> type;

    public FunctionArgument(@Nullable String name, ColumnType<?> type) {
        this.name = name;
        this.type = type;
    }

    @Nullable
    public String name() {
        return name;
    }

    public ColumnType<?> type() {
        return type;
    }

    @Override
    public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
        return visitor.visitFunctionArgument(this, context);
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

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

    @Override
    public String toString() {
        return "FunctionArgument{" +
            "name=" + name +
            ", type=" + type +
            '}';
    }
}

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        final FunctionArgument that = (FunctionArgument) o;
        return Objects.equals(this.name, that.name)
            && Objects.equals(this.type, that.type);
    
<methods>public non-sealed void <init>() ,public R accept(AstVisitor<R,C>, C) ,public abstract boolean equals(java.lang.Object) ,public abstract int hashCode() ,public abstract java.lang.String toString() <variables>