Merge pull request #2895 from F43nd1r/avoid-varargs-array-creation

Add one-arg overloads for coalesce
This commit is contained in:
Jan-Willem Gmelig Meyling 2021-06-07 22:30:11 +02:00 committed by GitHub
commit 8923195795
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 273 additions and 20 deletions

View File

@ -18,7 +18,7 @@ import org.jetbrains.annotations.Nullable;
import com.querydsl.core.types.*;
/**
* {@code BooleanExpression} represents {@code java.lang.Boolean} expressions
* {@code BooleanExpression} represents {@link java.lang.Boolean} expressions
*
* @author tiwe
* @see java.lang.Boolean
@ -177,6 +177,19 @@ public abstract class BooleanExpression extends LiteralExpression<Boolean> imple
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public BooleanExpression coalesce(Expression<Boolean> expr) {
Coalesce<Boolean> coalesce = new Coalesce<Boolean>(getType(), mixin);
coalesce.add(expr);
return coalesce.asBoolean();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -184,14 +197,28 @@ public abstract class BooleanExpression extends LiteralExpression<Boolean> imple
* @return coalesce
*/
@Override
public BooleanExpression coalesce(Expression<Boolean>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public BooleanExpression coalesce(Expression<?>... exprs) {
Coalesce<Boolean> coalesce = new Coalesce<Boolean>(getType(), mixin);
for (Expression<Boolean> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.asBoolean();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public BooleanExpression coalesce(Boolean arg) {
Coalesce<Boolean> coalesce = new Coalesce<Boolean>(getType(), mixin);
coalesce.add(arg);
return coalesce.asBoolean();
}
/**
* Create a {@code coalesce(this, args...)} expression
*

View File

@ -39,6 +39,11 @@ public class Coalesce<T extends Comparable> extends MutableExpressionBase<T> {
private transient volatile ComparableExpression<T> value;
public Coalesce(Class<? extends T> type, Expression<T> expr) {
super(type);
add(expr);
}
public Coalesce(Class<? extends T> type, Expression<?>... exprs) {
super(type);
// NOTE : type parameters for the varargs, would result in compiler warnings

View File

@ -409,6 +409,19 @@ public abstract class ComparableExpression<T extends Comparable> extends Compara
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public ComparableExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -416,14 +429,28 @@ public abstract class ComparableExpression<T extends Comparable> extends Compara
* @return coalesce
*/
@Override
public ComparableExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public ComparableExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public ComparableExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, args...)} expression
*

View File

@ -52,26 +52,52 @@ public abstract class ComparableExpressionBase<T extends Comparable> extends Sim
return asc;
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
public ComparableExpressionBase<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
* @param exprs additional arguments
* @return coalesce
*/
public ComparableExpressionBase<T> coalesce(Expression<T>...exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public ComparableExpressionBase<T> coalesce(Expression<?>...exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
public ComparableExpressionBase<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return coalesce.getValue();
}
/**
* Create a {@code coalesce(this, args...)} expression
*
* @param args additional arguments
* @return coalesce
*/
@SuppressWarnings("unchecked")
public ComparableExpressionBase<T> coalesce(T... args) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (T arg : args) {

View File

@ -228,6 +228,19 @@ public abstract class DateExpression<T extends Comparable> extends TemporalExpre
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public DateExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return coalesce.asDate();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -235,14 +248,28 @@ public abstract class DateExpression<T extends Comparable> extends TemporalExpre
* @return coalesce
*/
@Override
public DateExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public DateExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.asDate();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public DateExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return coalesce.asDate();
}
/**
* Create a {@code coalesce(this, args...)} expression
*
@ -250,6 +277,7 @@ public abstract class DateExpression<T extends Comparable> extends TemporalExpre
* @return coalesce
*/
@Override
@SuppressWarnings("unchecked")
public DateExpression<T> coalesce(T... args) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (T arg : args) {

View File

@ -298,6 +298,19 @@ public abstract class DateTimeExpression<T extends Comparable> extends TemporalE
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public DateTimeExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return coalesce.asDateTime();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -305,14 +318,28 @@ public abstract class DateTimeExpression<T extends Comparable> extends TemporalE
* @return coalesce
*/
@Override
public DateTimeExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public DateTimeExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.asDateTime();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public DateTimeExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return coalesce.asDateTime();
}
/**
* Create a {@code coalesce(this, args...)} expression
*
@ -320,6 +347,7 @@ public abstract class DateTimeExpression<T extends Comparable> extends TemporalE
* @return coalesce
*/
@Override
@SuppressWarnings("unchecked")
public DateTimeExpression<T> coalesce(T... args) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (T arg : args) {

View File

@ -80,6 +80,20 @@ public abstract class EnumExpression<T extends Enum<T>> extends LiteralExpressio
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public EnumExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return (EnumExpression<T>) coalesce.asEnum();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -87,14 +101,29 @@ public abstract class EnumExpression<T extends Enum<T>> extends LiteralExpressio
* @return coalesce
*/
@Override
public EnumExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public EnumExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return (EnumExpression<T>) coalesce.asEnum();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public EnumExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return (EnumExpression<T>) coalesce.asEnum();
}
/**
* Create a {@code coalesce(this, args...)} expression
*
@ -102,6 +131,7 @@ public abstract class EnumExpression<T extends Enum<T>> extends LiteralExpressio
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public EnumExpression<T> coalesce(T... args) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (T arg : args) {

View File

@ -804,6 +804,20 @@ public abstract class NumberExpression<T extends Number & Comparable<?>> extends
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public NumberExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return (NumberExpression<T>) coalesce.asNumber();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -811,15 +825,29 @@ public abstract class NumberExpression<T extends Number & Comparable<?>> extends
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public NumberExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public NumberExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return (NumberExpression<T>) coalesce.asNumber();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
@SuppressWarnings({"unchecked"})
public NumberExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return (NumberExpression<T>) coalesce.asNumber();
}
/**
* Create a {@code coalesce(this, args...)} expression
*

View File

@ -863,6 +863,19 @@ public abstract class StringExpression extends LiteralExpression<String> {
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public StringExpression coalesce(Expression<String> expr) {
Coalesce<String> coalesce = new Coalesce<String>(getType(), mixin);
coalesce.add(expr);
return coalesce.asString();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -870,14 +883,28 @@ public abstract class StringExpression extends LiteralExpression<String> {
* @return coalesce
*/
@Override
public StringExpression coalesce(Expression<String>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public StringExpression coalesce(Expression<?>... exprs) {
Coalesce<String> coalesce = new Coalesce<String>(getType(), mixin);
for (Expression<String> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.asString();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public StringExpression coalesce(String arg) {
Coalesce<String> coalesce = new Coalesce<String>(getType(), mixin);
coalesce.add(arg);
return coalesce.asString();
}
/**
* Create a {@code coalesce(this, args...)} expression
*

View File

@ -144,6 +144,19 @@ public abstract class TimeExpression<T extends Comparable> extends TemporalExpre
return nullif(ConstantImpl.create(other));
}
/**
* Create a {@code coalesce(this, expr)} expression
*
* @param expr additional argument
* @return coalesce
*/
@Override
public TimeExpression<T> coalesce(Expression<T> expr) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(expr);
return coalesce.asTime();
}
/**
* Create a {@code coalesce(this, exprs...)} expression
*
@ -151,14 +164,28 @@ public abstract class TimeExpression<T extends Comparable> extends TemporalExpre
* @return coalesce
*/
@Override
public TimeExpression<T> coalesce(Expression<T>... exprs) {
@SuppressWarnings({"unchecked", "rawtypes"})
public TimeExpression<T> coalesce(Expression<?>... exprs) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
for (Expression<T> expr : exprs) {
for (Expression expr : exprs) {
coalesce.add(expr);
}
return coalesce.asTime();
}
/**
* Create a {@code coalesce(this, arg)} expression
*
* @param arg additional argument
* @return coalesce
*/
@Override
public TimeExpression<T> coalesce(T arg) {
Coalesce<T> coalesce = new Coalesce<T>(getType(), mixin);
coalesce.add(arg);
return coalesce.asTime();
}
/**
* Create a {@code coalesce(this, args...)} expression
*