baldimir commented on code in PR #6408:
URL: 
https://github.com/apache/incubator-kie-drools/pull/6408#discussion_r2245034160


##########
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java:
##########
@@ -455,7 +455,7 @@ public static Object coerceUsingType(Object value, DMNType 
type, boolean typeChe
         if (!typeCheck) {
             return result;
         }
-        if (type.isAssignableValue(result)) {
+        if (type.isAssignableValue(value)) {

Review Comment:
   I think this whole method looks a bit cumbersome (not because of the change, 
it just builds on top of what is already there). It returns on various places 
and it is not visible on first sight what it is doing. Maybe we could replace 
it with something like this: 
   
   ```
   public static Object coerceUsingType(Object value, DMNType type, boolean 
typeCheck, BiConsumer<Object, DMNType> nullCallback) {
           if (typeCheck) {
               if (type.isAssignableValue(value)) {
                   return coerceSingleItemCollectionToValue(value, type);
               } else {
                   nullCallback.accept(value, type);
                   return null;
               }
           } else {
               return coerceSingleItemCollectionToValue(value, type);
           }
       }
   
       /**
        * Checks a type and if it is not a collection type, checks if the 
specified value is a collection 
        * that contains only a single value and if yes, coerces the collection 
to the single item itself.  
        * E.g. [1] becomes 1. Basically it unwraps the single item from a 
collection, if it is required. 
        * 
        * @param value Value that is checked and potentially coerced to a 
single item.  
        * @param type Required type. Based on this type, it is determined, if 
the coercion happens. 
        *             If the requirement is for a non-collection type and the 
value is a single item collection, 
        *             the coercion happens. 
        * @return If all requirements are met, returns coerced value. Otherwise 
returns the original value. 
        */
       private static Object coerceSingleItemCollectionToValue(Object value, 
DMNType type) {
           if (!type.isCollection() && value instanceof Collection && 
((Collection<?>) value).size() == 1) {
               // as per Decision evaluation result.
               return ((Collection<?>) value).toArray()[0];
           } else {
               return value;
           }
       }
   ```
   What do you think, please? 



-- 
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