Skip to content

Commit

Permalink
Refactor UserDefinedExpression and related classes (#1112)
Browse files Browse the repository at this point in the history
* Remove the unchecked cast warning

* Make KExpressions dependent on Expressions

* Make null checks comprehensive

* Restrict instantiation of UserDefinedExpression to the same package
  • Loading branch information
nakamura-to committed May 27, 2024
1 parent 7593bf4 commit c8833a9
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?>[] operands,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(klass);
Objects.requireNonNull(name);
Objects.requireNonNull(operands);
Objects.requireNonNull(block);
return userDefined(klass, name, Arrays.asList(operands), block);
}
Expand All @@ -343,6 +345,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(klass);
Objects.requireNonNull(name);
Objects.requireNonNull(operand);
Objects.requireNonNull(block);
return userDefined(klass, name, Collections.singletonList(operand), block);
}
Expand All @@ -367,6 +371,9 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand2,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(klass);
Objects.requireNonNull(name);
Objects.requireNonNull(operand1);
Objects.requireNonNull(operand2);
Objects.requireNonNull(block);
return userDefined(klass, name, Arrays.asList(operand1, operand2), block);
}
Expand All @@ -393,6 +400,10 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand3,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(klass);
Objects.requireNonNull(name);
Objects.requireNonNull(operand1);
Objects.requireNonNull(operand2);
Objects.requireNonNull(operand3);
Objects.requireNonNull(block);
return userDefined(klass, name, Arrays.asList(operand1, operand2, operand3), block);
}
Expand All @@ -415,6 +426,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
List<? extends PropertyMetamodel<?>> operands,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(klass);
Objects.requireNonNull(name);
Objects.requireNonNull(operands);
Objects.requireNonNull(block);
return new UserDefinedExpression<>(klass, name, operands, block);
}
Expand All @@ -437,6 +450,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?>[] operands,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
Objects.requireNonNull(name);
Objects.requireNonNull(operands);
Objects.requireNonNull(block);
return userDefined(resultPropertyMetamodel, name, Arrays.asList(operands), block);
}
Expand All @@ -459,6 +474,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
Objects.requireNonNull(name);
Objects.requireNonNull(operand);
Objects.requireNonNull(block);
return userDefined(resultPropertyMetamodel, name, Collections.singletonList(operand), block);
}
Expand All @@ -483,6 +500,9 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand2,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
Objects.requireNonNull(name);
Objects.requireNonNull(operand1);
Objects.requireNonNull(operand2);
Objects.requireNonNull(block);
return userDefined(resultPropertyMetamodel, name, Arrays.asList(operand1, operand2), block);
}
Expand All @@ -509,6 +529,9 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
PropertyMetamodel<?> operand3,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
Objects.requireNonNull(operand1);
Objects.requireNonNull(operand2);
Objects.requireNonNull(operand3);
Objects.requireNonNull(block);
return userDefined(
resultPropertyMetamodel, name, Arrays.asList(operand1, operand2, operand3), block);
Expand All @@ -532,6 +555,8 @@ public static <PROPERTY> UserDefinedExpression<PROPERTY> userDefined(
List<? extends PropertyMetamodel<?>> operands,
Consumer<UserDefinedExpression.Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
Objects.requireNonNull(name);
Objects.requireNonNull(operands);
Objects.requireNonNull(block);
return new UserDefinedExpression<>(resultPropertyMetamodel, name, operands, block);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
public class UserDefinedExpression<PROPERTY> implements PropertyMetamodel<PROPERTY> {
private final String name;
private final List<? extends PropertyMetamodel<?>> operands;
private final Class<PROPERTY> klass;
private final Class<?> klass;
private final EntityPropertyType<?, ?> type;
private final Consumer<Declaration> block;

public UserDefinedExpression(
UserDefinedExpression(
Class<PROPERTY> klass,
String name,
List<? extends PropertyMetamodel<?>> operands,
Expand All @@ -32,13 +32,13 @@ public UserDefinedExpression(
this.block = Objects.requireNonNull(block);
}

public UserDefinedExpression(
UserDefinedExpression(
PropertyMetamodel<PROPERTY> resultPropertyMetamodel,
String name,
List<? extends PropertyMetamodel<?>> operands,
Consumer<Declaration> block) {
Objects.requireNonNull(resultPropertyMetamodel);
this.klass = (Class<PROPERTY>) resultPropertyMetamodel.asClass();
this.klass = resultPropertyMetamodel.asClass();
this.type = resultPropertyMetamodel.asType();
this.name = Objects.requireNonNull(name);
this.operands = Objects.requireNonNull(operands);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,15 +297,15 @@ object KExpressions {
operands: List<PropertyMetamodel<*>>,
noinline block: UserDefinedExpression.Declaration.() -> Unit,
): UserDefinedExpression<PROPERTY> {
return UserDefinedExpression(PROPERTY::class.java, name, operands, block)
return Expressions.userDefined(PROPERTY::class.java, name, operands, block)
}

inline fun <reified PROPERTY> userDefined(
name: String,
vararg operands: PropertyMetamodel<*>,
noinline block: UserDefinedExpression.Declaration.() -> Unit,
): UserDefinedExpression<PROPERTY> {
return UserDefinedExpression(PROPERTY::class.java, name, operands.toList(), block)
return Expressions.userDefined(PROPERTY::class.java, name, operands.toList(), block)
}

fun <PROPERTY> userDefined(
Expand All @@ -314,7 +314,7 @@ object KExpressions {
operands: List<PropertyMetamodel<*>>,
block: UserDefinedExpression.Declaration.() -> Unit,
): UserDefinedExpression<PROPERTY> {
return UserDefinedExpression(resultPropertyMetamodel, name, operands, block)
return Expressions.userDefined(resultPropertyMetamodel, name, operands, block)
}

fun <PROPERTY> userDefined(
Expand All @@ -323,6 +323,6 @@ object KExpressions {
vararg operands: PropertyMetamodel<*>,
block: UserDefinedExpression.Declaration.() -> Unit,
): UserDefinedExpression<PROPERTY> {
return UserDefinedExpression(resultPropertyMetamodel, name, operands.toList(), block)
return Expressions.userDefined(resultPropertyMetamodel, name, operands.toList(), block)
}
}

0 comments on commit c8833a9

Please sign in to comment.