Search in sources :

Example 1 with AssignExprT

use of org.drools.mvelcompiler.ast.AssignExprT in project drools by kiegroup.

the class LHSPhase method withBigDecimalConversion.

// Conversion of AssignExpr to BigDecimal Arithmetic operation when LHS is is a BigDecimal variable
public Optional<TypedExpression> withBigDecimalConversion(AssignExpr assignExpr, TypedExpression target, TypedExpression value) {
    Optional<Type> optRHSType = value.getType();
    if (!optRHSType.isPresent()) {
        return Optional.empty();
    }
    AssignExpr.Operator operator = assignExpr.getOperator();
    if (operator == AssignExpr.Operator.ASSIGN) {
        return Optional.empty();
    }
    // handled previously in FieldAccessExpr visitor
    boolean assigningToFieldAccess = target instanceof FieldToAccessorTExpr;
    if (!assigningToFieldAccess && target.getType().filter(t -> t == BigDecimal.class).isPresent()) {
        String bigDecimalMethod = BigDecimalArithmeticExprT.toBigDecimalMethod(operator);
        BigDecimalArithmeticExprT convertedBigDecimalExpr = new BigDecimalArithmeticExprT(bigDecimalMethod, target, value);
        return Optional.of(new AssignExprT(AssignExpr.Operator.ASSIGN, target, convertedBigDecimalExpr));
    }
    return Optional.empty();
}
Also used : BigDecimalArithmeticExprT(org.drools.mvelcompiler.ast.BigDecimalArithmeticExprT) Type(java.lang.reflect.Type) AssignExprT(org.drools.mvelcompiler.ast.AssignExprT) BigDecimal(java.math.BigDecimal) AssignExpr(com.github.javaparser.ast.expr.AssignExpr) FieldToAccessorTExpr(org.drools.mvelcompiler.ast.FieldToAccessorTExpr)

Example 2 with AssignExprT

use of org.drools.mvelcompiler.ast.AssignExprT in project drools by kiegroup.

the class LHSPhase method visit.

@Override
public TypedExpression visit(AssignExpr n, Void arg) {
    logPhase("AssignExpr {}", n);
    TypedExpression target = n.getTarget().accept(this, arg);
    Optional<TypedExpression> bigDecimalConversion = withBigDecimalConversion(n, target, rhsOrError());
    if (bigDecimalConversion.isPresent()) {
        return bigDecimalConversion.get();
    }
    if (target instanceof FieldToAccessorTExpr || target instanceof VariableDeclaratorTExpr || target instanceof MapPutExprT) {
        return target;
    }
    return new AssignExprT(n.getOperator(), target, rhsOrNull());
}
Also used : MapPutExprT(org.drools.mvelcompiler.ast.MapPutExprT) AssignExprT(org.drools.mvelcompiler.ast.AssignExprT) VariableDeclaratorTExpr(org.drools.mvelcompiler.ast.VariableDeclaratorTExpr) UnalteredTypedExpression(org.drools.mvelcompiler.ast.UnalteredTypedExpression) TypedExpression(org.drools.mvelcompiler.ast.TypedExpression) FieldToAccessorTExpr(org.drools.mvelcompiler.ast.FieldToAccessorTExpr)

Aggregations

AssignExprT (org.drools.mvelcompiler.ast.AssignExprT)2 FieldToAccessorTExpr (org.drools.mvelcompiler.ast.FieldToAccessorTExpr)2 AssignExpr (com.github.javaparser.ast.expr.AssignExpr)1 Type (java.lang.reflect.Type)1 BigDecimal (java.math.BigDecimal)1 BigDecimalArithmeticExprT (org.drools.mvelcompiler.ast.BigDecimalArithmeticExprT)1 MapPutExprT (org.drools.mvelcompiler.ast.MapPutExprT)1 TypedExpression (org.drools.mvelcompiler.ast.TypedExpression)1 UnalteredTypedExpression (org.drools.mvelcompiler.ast.UnalteredTypedExpression)1 VariableDeclaratorTExpr (org.drools.mvelcompiler.ast.VariableDeclaratorTExpr)1