[jOOQ/jOOQ#12425] Fix type inference problems (Java 8-17)

This commit is contained in:
Lukas Eder 2021-09-15 13:19:31 +02:00
parent 88c6652b38
commit 28f61b061f
6 changed files with 8 additions and 31 deletions

View File

@ -1502,26 +1502,6 @@ abstract class AbstractField<T> extends AbstractTypedNamed<T> implements Field<T
return DSL.log(numeric(), base);
}
@Override
public final Field<BigDecimal> pow(Number exponent) {
return DSL.power(numeric(), exponent);
}
@Override
public final Field<BigDecimal> power(Number exponent) {
return pow(exponent);
}
@Override
public final Field<BigDecimal> pow(Field<? extends Number> exponent) {
return DSL.power(numeric(), exponent);
}
@Override
public final Field<BigDecimal> power(Field<? extends Number> exponent) {
return pow(exponent);
}
@Override
@Deprecated
public final Field<BigDecimal> acos() {

View File

@ -112,10 +112,9 @@ extends
default:
ctx.sql('(');
Expression.acceptAssociative(
Expression.<Field<T>, BitAnd<T>>acceptAssociative(
ctx,
this,
BitAnd.class,
q -> new Expression.Expr<>(q.arg1, Operators.OP_AMP, q.arg2),
c -> c.sql(' ')
);

View File

@ -117,10 +117,9 @@ extends
default:
ctx.sql('(');
Expression.acceptAssociative(
Expression.<Field<T>, BitOr<T>>acceptAssociative(
ctx,
this,
BitOr.class,
q -> new Expression.Expr<>(q.arg1, Operators.OP_VERBAR, q.arg2),
c -> c.sql(' ')
);

View File

@ -121,10 +121,9 @@ extends
default:
ctx.sql('(');
SQL op = Expression.HASH_OP_FOR_BIT_XOR.contains(ctx.dialect()) ? Operators.OP_NUM : Operators.OP_HAT;
Expression.acceptAssociative(
Expression.<Field<T>, BitXor<T>>acceptAssociative(
ctx,
this,
BitXor.class,
q -> new Expression.Expr<>(q.arg1, op, q.arg2),
c -> c.sql(' ')
);

View File

@ -154,10 +154,9 @@ final class CombinedCondition extends AbstractCondition {
{
ctx.sqlIndentStart('(');
Expression.acceptAssociative(
Expression.<Condition, CombinedCondition>acceptAssociative(
ctx,
this,
CombinedCondition.class,
q -> new Expr<>(q.op1, q.operator.toKeyword(), q.op2),
Context::formatSeparator
);

View File

@ -894,16 +894,17 @@ final class Expression<T> extends AbstractTransformable<T> {
}
}
static final /* record */ class Expr<Q> { private final Q lhs; private final QueryPart op; private final Q rhs; public Expr(Q lhs, QueryPart op, Q rhs) { this.lhs = lhs; this.op = op; this.rhs = rhs; } public Q lhs() { return lhs; } public QueryPart op() { return op; } public Q rhs() { return rhs; } @Override public boolean equals(Object o) { if (!(o instanceof Expr)) return false; Expr other = (Expr) o; if (!java.util.Objects.equals(this.lhs, other.lhs)) return false; if (!java.util.Objects.equals(this.op, other.op)) return false; if (!java.util.Objects.equals(this.rhs, other.rhs)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.lhs, this.op, this.rhs); } @Override public String toString() { return new StringBuilder("Expr[").append("lhs=").append(this.lhs).append(", op=").append(this.op).append(", rhs=").append(this.rhs).append("]").toString(); } }
static final /* record */ class Expr<Q extends QueryPart> { private final Q lhs; private final QueryPart op; private final Q rhs; public Expr(Q lhs, QueryPart op, Q rhs) { this.lhs = lhs; this.op = op; this.rhs = rhs; } public Q lhs() { return lhs; } public QueryPart op() { return op; } public Q rhs() { return rhs; } @Override public boolean equals(Object o) { if (!(o instanceof Expr)) return false; Expr other = (Expr) o; if (!java.util.Objects.equals(this.lhs, other.lhs)) return false; if (!java.util.Objects.equals(this.op, other.op)) return false; if (!java.util.Objects.equals(this.rhs, other.rhs)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.lhs, this.op, this.rhs); } @Override public String toString() { return new StringBuilder("Expr[").append("lhs=").append(this.lhs).append(", op=").append(this.op).append(", rhs=").append(this.rhs).append("]").toString(); } }
@SuppressWarnings("unchecked")
static final <Q1 extends QueryPart, Q2 extends Q1> void acceptAssociative(
Context<?> ctx,
Q2 exp,
Class<Q2> expType,
Function<? super Q2, ? extends Expr<Q1>> expProvider,
Consumer<? super Context<?>> formatSeparator
) {
Expr<Q1> e = expProvider.apply(exp);
Class<Q2> expType = (Class<Q2>) exp.getClass();
// [#10665] Associativity is only given for two operands of the same data type
boolean associativity = e.lhs instanceof Typed && e.rhs instanceof Typed
@ -931,7 +932,7 @@ final class Expression<T> extends AbstractTransformable<T> {
Expr<Q1> exp = expProvider.apply((Q2) q);
if (op.equals(exp.op)) {
acceptAssociative(ctx, (Q2) q, expType, expProvider, formatSeparator);
acceptAssociative(ctx, (Q2) q, expProvider, formatSeparator);
return;
}
}