mariofusco commented on code in PR #5632:
URL:
https://github.com/apache/incubator-kie-drools/pull/5632#discussion_r1431014484
##########
kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/infixexecutors/AddExecutor.java:
##########
@@ -51,77 +52,68 @@ public static AddExecutor instance() {
@Override
public Object evaluate(Object left, Object right, EvaluationContext ctx) {
- return evaluate(new EvaluatedParameters(left, right), ctx);
+ return add(left, right, ctx);
}
@Override
public Object evaluate(InfixOpNode infixNode, EvaluationContext ctx) {
return evaluate(infixNode.getLeft().evaluate(ctx),
infixNode.getRight().evaluate(ctx), ctx);
}
- private Object evaluate(EvaluatedParameters params, EvaluationContext ctx)
{
- if (params.getLeft() == null || params.getRight() == null) {
+ private Object add(Object left, Object right, EvaluationContext ctx) {
+ if (left == null || right == null) {
return null;
- }
- ClassIdentifierTuple identifierTuple = new
ClassIdentifierTuple(params.getLeft(), params.getRight());
- if (addFunctionsByClassesTuple.containsKey(identifierTuple)) {
- return
addFunctionsByClassesTuple.get(identifierTuple).apply(params, ctx);
- } else {
- return math(params.getLeft(), params.getRight(), ctx, (l, r) ->
l.add(r, MathContext.DECIMAL128));
- }
- }
-
- private Map<ClassIdentifierTuple, BiFunction<EvaluatedParameters,
EvaluationContext, Object>> getAddFunctionsByClassesTuple() {
- Map<ClassIdentifierTuple, BiFunction<EvaluatedParameters,
EvaluationContext, Object>> toReturn = new HashMap<>();
- toReturn.put(new ClassIdentifierTuple(String.class, String.class),
(parameters, ctx) -> parameters.getLeft() + (String) parameters.getRight());
- toReturn.put(new ClassIdentifierTuple(ChronoPeriod.class,
ChronoPeriod.class), (parameters, ctx) ->
- new ComparablePeriod(((ChronoPeriod)
parameters.getLeft()).plus((ChronoPeriod) parameters.getRight())));
- toReturn.put(new ClassIdentifierTuple(Duration.class, Duration.class),
(parameters, ctx) ->
- ((Duration) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(ZonedDateTime.class,
ChronoPeriod.class), (parameters, ctx) ->
- ((ZonedDateTime) parameters.getLeft()).plus((ChronoPeriod)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(OffsetDateTime.class,
ChronoPeriod.class), (parameters, ctx) ->
- ((OffsetDateTime) parameters.getLeft()).plus((ChronoPeriod)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(LocalDateTime.class,
ChronoPeriod.class), (parameters, ctx) ->
- ((LocalDateTime) parameters.getLeft()).plus((ChronoPeriod)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(LocalDate.class,
ChronoPeriod.class), (parameters, ctx) ->
- ((LocalDate) parameters.getLeft()).plus((ChronoPeriod)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(ZonedDateTime.class,
Duration.class), (parameters, ctx) ->
- ((ZonedDateTime) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(OffsetDateTime.class,
Duration.class), (parameters, ctx) ->
- ((OffsetDateTime) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(LocalDateTime.class,
Duration.class), (parameters, ctx) ->
- ((LocalDateTime) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(LocalDate.class,
Duration.class), (parameters, ctx) ->
- addLocalDateAndDuration((LocalDate) parameters.getLeft(),
(Duration) parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(ChronoPeriod.class,
ZonedDateTime.class), (parameters, ctx) ->
- ((ZonedDateTime) parameters.getRight()).plus((ChronoPeriod)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(ChronoPeriod.class,
OffsetDateTime.class), (parameters, ctx) ->
- ((OffsetDateTime) parameters.getRight()).plus((ChronoPeriod)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(ChronoPeriod.class,
LocalDateTime.class), (parameters, ctx) ->
- ((LocalDateTime) parameters.getRight()).plus((ChronoPeriod)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(ChronoPeriod.class,
LocalDate.class), (parameters, ctx) ->
- ((LocalDate) parameters.getRight()).plus((ChronoPeriod)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
ZonedDateTime.class), (parameters, ctx) ->
- ((ZonedDateTime) parameters.getRight()).plus((Duration)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
OffsetDateTime.class), (parameters, ctx) ->
- ((OffsetDateTime) parameters.getRight()).plus((Duration)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
LocalDateTime.class), (parameters, ctx) ->
- ((LocalDateTime) parameters.getRight()).plus((Duration)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
LocalDate.class), (parameters, ctx) ->
- addLocalDateAndDuration((LocalDate) parameters.getRight(),
(Duration) parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(LocalTime.class,
Duration.class), (parameters, ctx) ->
- ((LocalTime) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
LocalTime.class), (parameters, ctx) ->
- ((LocalTime) parameters.getRight()).plus((Duration)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(OffsetTime.class,
Duration.class), (parameters, ctx) ->
- ((OffsetTime) parameters.getLeft()).plus((Duration)
parameters.getRight()));
- toReturn.put(new ClassIdentifierTuple(Duration.class,
OffsetTime.class), (parameters, ctx) ->
- ((OffsetTime) parameters.getRight()).plus((Duration)
parameters.getLeft()));
- toReturn.put(new ClassIdentifierTuple(Temporal.class, Temporal.class),
(parameters, ctx) -> {
+ } else if (left instanceof String && right instanceof String) {
Review Comment:
Maybe I'm underestimating the problem, but this if-else chain seems
unnecessarily complicated. Give me a bit more time to review/rework it.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]