This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new b154d01f69 MVEL.analyse is not using DataConverter coercions (#5297)
b154d01f69 is described below

commit b154d01f69fa0e74c8a0e3cef77157658f5896f8
Author: mdproctor <[email protected]>
AuthorDate: Fri Feb 9 07:07:43 2024 +0000

    MVEL.analyse is not using DataConverter coercions (#5297)
---
 .../org/drools/mvel/MVELConstraintBuilder.java     |  2 +-
 .../java/org/drools/mvel/MVELDateCoercionTest.java | 72 ++++++++++++++++++++++
 2 files changed, 73 insertions(+), 1 deletion(-)

diff --git 
a/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java 
b/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
index 7d03ed6cb3..38809896b7 100644
--- a/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
+++ b/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
@@ -480,7 +480,7 @@ public class MVELConstraintBuilder implements 
ConstraintBuilder {
 
     public static class StringCoercionCompatibilityEvaluator extends 
CompatibilityStrategy.DefaultCompatibilityEvaluator {
 
-        private static final CompatibilityStrategy.CompatibilityEvaluator 
INSTANCE = new StringCoercionCompatibilityEvaluator();
+        public static final CompatibilityStrategy.CompatibilityEvaluator 
INSTANCE = new StringCoercionCompatibilityEvaluator();
 
         private StringCoercionCompatibilityEvaluator() { }
 
diff --git 
a/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java 
b/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
index 4eec3e1416..9e06729024 100644
--- a/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
+++ b/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
@@ -20,13 +20,23 @@ package org.drools.mvel;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
 
+import 
org.drools.mvel.MVELConstraintBuilder.StringCoercionCompatibilityEvaluator;
 import org.drools.util.DateUtils;
 import org.drools.mvel.expr.MVELDateCoercion;
 import org.junit.Test;
+import org.mvel2.DataConversion;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.util.CompatibilityStrategy;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.within;
+import static org.mvel2.MVEL.executeExpression;
 
 public class MVELDateCoercionTest {
 
@@ -51,4 +61,66 @@ public class MVELDateCoercionTest {
         assertThat(co.convertFrom(dt)).isEqualTo(dt_);
     }
 
+    @Test
+    public void testCoercionDuringAnalyze() {
+        
CompatibilityStrategy.setCompatibilityEvaluator(StringCoercionCompatibilityEvaluator.INSTANCE);
+
+        DataConversion.addConversionHandler(Date.class,
+                                            new MVELDateCoercion());
+
+        String expr = "f.departureTime >= \"01-Jan-1970\" && f.departureTime 
<= \"01-Jan-2018\"";
+
+        ParserContext ctx = new ParserContext();
+        ctx.setStrongTyping(true);
+        ctx.setStrictTypeEnforcement(true);
+        ctx.addInput("f", Flight.class);
+
+        Class cls = MVEL.analyze( expr,
+                                   ctx );
+
+        assertThat(cls).isNotNull();
+    }
+
+    public static class Flight {
+        private Date departureTime;
+
+        public Flight(Date departureTime) {
+            this.departureTime = departureTime;
+        }
+
+        public Date getDepartureTime() {
+            return departureTime;
+        }
+
+        public void setDepartureTime(Date departureTime) {
+            this.departureTime = departureTime;
+        }
+
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+
+            Flight flight = (Flight) o;
+
+            return Objects.equals(departureTime, flight.departureTime);
+        }
+
+        @Override
+        public int hashCode() {
+            return departureTime != null ? departureTime.hashCode() : 0;
+        }
+
+        @Override
+        public String toString() {
+            return "Flight{" +
+                   "departureTime=" + departureTime +
+                   '}';
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to