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]

Reply via email to