This is an automated email from the ASF dual-hosted git repository.
tzimanyi pushed a commit to branch 8.40.x
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/8.40.x by this push:
new 40820b0ca3 [kie-issues#649] Use appropriate BigDecimal method to
convert to primitive type (#5567) (#5570)
40820b0ca3 is described below
commit 40820b0ca3da9ae6835f8fad887632ec7c57188a
Author: Tibor Zimányi <[email protected]>
AuthorDate: Mon Oct 30 13:55:26 2023 +0100
[kie-issues#649] Use appropriate BigDecimal method to convert to primitive
type (#5567) (#5570)
---
.../mvelcompiler/ast/FieldToAccessorTExpr.java | 14 ++-
.../src/test/java/org/drools/Person.java | 82 +++++++++++++++
.../org/drools/mvelcompiler/MvelCompilerTest.java | 110 +++++++++++++++++++++
3 files changed, 205 insertions(+), 1 deletion(-)
diff --git
a/drools-model/drools-mvel-compiler/src/main/java/org/drools/mvelcompiler/ast/FieldToAccessorTExpr.java
b/drools-model/drools-mvel-compiler/src/main/java/org/drools/mvelcompiler/ast/FieldToAccessorTExpr.java
index 1a9b1a290d..4c69faa9ed 100644
---
a/drools-model/drools-mvel-compiler/src/main/java/org/drools/mvelcompiler/ast/FieldToAccessorTExpr.java
+++
b/drools-model/drools-mvel-compiler/src/main/java/org/drools/mvelcompiler/ast/FieldToAccessorTExpr.java
@@ -19,6 +19,7 @@ package org.drools.mvelcompiler.ast;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -28,6 +29,7 @@ import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.expr.EnclosedExpr;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
+import org.drools.mvelcompiler.util.BigDecimalArgumentCoercion;
import org.drools.util.MethodUtils;
import static com.github.javaparser.ast.NodeList.nodeList;
@@ -70,7 +72,17 @@ public class FieldToAccessorTExpr implements TypedExpression
{
.map(this::convertToStringIfNeeded)
.collect(Collectors.toList());
- return new MethodCallExpr((Expression) scope.toJavaExpression(),
accessor.getName(), nodeList(expressionArguments));
+ Optional<Type> rhsType = this.arguments.stream()
+ .findFirst()
+ .flatMap(TypedExpression::getType);
+
+ // Right is BigDecimal, left is other, coerce
+ if(rhsType.isPresent() && rhsType.get().equals(BigDecimal.class) &&
!type.equals(BigDecimal.class)) {
+ Expression coercedExpression = new
BigDecimalArgumentCoercion().coercedArgument(BigDecimal.class, (Class<?>)type,
expressionArguments.get(0));
+ return new MethodCallExpr((Expression) scope.toJavaExpression(),
accessor.getName(), nodeList(coercedExpression));
+ } else {
+ return new MethodCallExpr((Expression) scope.toJavaExpression(),
accessor.getName(), nodeList(expressionArguments));
+ }
}
private Expression convertToStringIfNeeded(TypedExpression
argumentExpression) {
diff --git
a/drools-model/drools-mvel-compiler/src/test/java/org/drools/Person.java
b/drools-model/drools-mvel-compiler/src/test/java/org/drools/Person.java
index a79fc61d09..c7aa2e565e 100644
--- a/drools-model/drools-mvel-compiler/src/test/java/org/drools/Person.java
+++ b/drools-model/drools-mvel-compiler/src/test/java/org/drools/Person.java
@@ -26,6 +26,16 @@ public class Person {
private String name;
private int age;
+ private long longValue;
+ private short shortValue;
+ private double doubleValue;
+ private float floatValue;
+
+ private Integer integerBoxed;
+ private Long longBoxed;
+ private Short shortBoxed;
+ private Double doubleBoxed;
+ private Float floatBoxed;
private Person parent;
private Address address;
@@ -120,4 +130,76 @@ public class Person {
public boolean isEven(int value) {
return true;
}
+
+ public long getLongValue() {
+ return longValue;
+ }
+
+ public void setLongValue(long longValue) {
+ this.longValue = longValue;
+ }
+
+ public short getShortValue() {
+ return shortValue;
+ }
+
+ public void setShortValue(short shortValue) {
+ this.shortValue = shortValue;
+ }
+
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ public void setDoubleValue(double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ public float getFloatValue() {
+ return floatValue;
+ }
+
+ public void setFloatValue(float floatValue) {
+ this.floatValue = floatValue;
+ }
+
+ public Integer getIntegerBoxed() {
+ return integerBoxed;
+ }
+
+ public void setIntegerBoxed(Integer integerBoxed) {
+ this.integerBoxed = integerBoxed;
+ }
+
+ public Long getLongBoxed() {
+ return longBoxed;
+ }
+
+ public void setLongBoxed(Long longBoxed) {
+ this.longBoxed = longBoxed;
+ }
+
+ public Short getShortBoxed() {
+ return shortBoxed;
+ }
+
+ public void setShortBoxed(Short shortBoxed) {
+ this.shortBoxed = shortBoxed;
+ }
+
+ public Double getDoubleBoxed() {
+ return doubleBoxed;
+ }
+
+ public void setDoubleBoxed(Double doubleBoxed) {
+ this.doubleBoxed = doubleBoxed;
+ }
+
+ public Float getFloatBoxed() {
+ return floatBoxed;
+ }
+
+ public void setFloatBoxed(Float floatBoxed) {
+ this.floatBoxed = floatBoxed;
+ }
}
diff --git
a/drools-model/drools-mvel-compiler/src/test/java/org/drools/mvelcompiler/MvelCompilerTest.java
b/drools-model/drools-mvel-compiler/src/test/java/org/drools/mvelcompiler/MvelCompilerTest.java
index 24e7372038..315b57c972 100644
---
a/drools-model/drools-mvel-compiler/src/test/java/org/drools/mvelcompiler/MvelCompilerTest.java
+++
b/drools-model/drools-mvel-compiler/src/test/java/org/drools/mvelcompiler/MvelCompilerTest.java
@@ -778,6 +778,116 @@ public class MvelCompilerTest implements CompilerTest {
"}");
}
+ @Test
+ public void testBigDecimalAssignmentToInt() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.age = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setAge($p.getSalary().intValue());\n" +
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToIntegerBoxed() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.integerBoxed = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setIntegerBoxed($p.getSalary().intValue());\n"
+
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToLong() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.longValue = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setLongValue($p.getSalary().longValue());\n" +
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToLongBoxed() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.longBoxed = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setLongBoxed($p.getSalary().longValue());\n" +
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToShort() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.shortValue = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setShortValue($p.getSalary().shortValue());\n"
+
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToShortBoxed() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.shortBoxed = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setShortBoxed($p.getSalary().shortValue());\n"
+
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToDouble() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.doubleValue = $p.salary;\n" +
+ "}",
+ "{ " +
+ "
$p.setDoubleValue($p.getSalary().doubleValue());\n" +
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToDoubleBoxed() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.doubleBoxed = $p.salary;\n" +
+ "}",
+ "{ " +
+ "
$p.setDoubleBoxed($p.getSalary().doubleValue());\n" +
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToFloat() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.floatValue = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setFloatValue($p.getSalary().floatValue());\n"
+
+ "}");
+ }
+
+ @Test
+ public void testBigDecimalAssignmentToFloatBoxed() {
+ test(ctx -> ctx.addDeclaration("$p", Person.class),
+ "{ " +
+ " $p.floatBoxed = $p.salary;\n" +
+ "}",
+ "{ " +
+ " $p.setFloatBoxed($p.getSalary().floatValue());\n"
+
+ "}");
+ }
+
@Test
public void testBigDecimalPromotionAllFourOperations() {
test(ctx -> ctx.addDeclaration("$p", Person.class),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]