Search in sources :

Example 6 with EnclosedExpr

use of org.drools.javaparser.ast.expr.EnclosedExpr in project drools by kiegroup.

the class PatternExpressionBuilder method buildBinding.

@Override
public MethodCallExpr buildBinding(DrlxParseSuccess drlxParseResult) {
    MethodCallExpr bindDSL = new MethodCallExpr(null, BIND_CALL);
    if (drlxParseResult.hasUnificationVariable()) {
        bindDSL.addArgument(new NameExpr(toVar(drlxParseResult.getUnificationVariable())));
    } else {
        bindDSL.addArgument(new NameExpr(toVar(drlxParseResult.getExprBinding())));
    }
    final Expression constraintExpression = drlxParseResult.getExpr() instanceof EnclosedExpr ? buildConstraintExpression(drlxParseResult, ((EnclosedExpr) drlxParseResult.getExpr()).getInner()) : buildConstraintExpression(drlxParseResult, drlxParseResult.getUsedDeclarationsOnLeft(), DrlxParseUtil.findLeftLeafOfMethodCall(drlxParseResult.getLeft().getExpression()));
    bindDSL.addArgument(constraintExpression);
    final Optional<MethodCallExpr> methodCallExpr = buildReactOn(drlxParseResult);
    methodCallExpr.ifPresent(bindDSL::addArgument);
    return bindDSL;
}
Also used : Expression(org.drools.javaparser.ast.expr.Expression) TypedExpression(org.drools.modelcompiler.builder.generator.TypedExpression) NameExpr(org.drools.javaparser.ast.expr.NameExpr) EnclosedExpr(org.drools.javaparser.ast.expr.EnclosedExpr) MethodCallExpr(org.drools.javaparser.ast.expr.MethodCallExpr)

Example 7 with EnclosedExpr

use of org.drools.javaparser.ast.expr.EnclosedExpr in project drools by kiegroup.

the class ExpressionTyper method processFirstNode.

private Optional<TypedExpressionCursor> processFirstNode(Expression drlxExpr, List<Node> childNodes, Node firstNode, boolean isInLineCast, Class<?> originalTypeCursor) {
    final Optional<TypedExpressionCursor> result;
    if (firstNode instanceof ThisExpr || (firstNode instanceof NameExpr && firstNode.toString().equals(bindingId))) {
        result = of(thisExpr(drlxExpr, childNodes, isInLineCast, originalTypeCursor));
    } else if (firstNode instanceof NameExpr) {
        result = nameExpr(drlxExpr, (NameExpr) firstNode, isInLineCast, originalTypeCursor);
    } else if (firstNode instanceof FieldAccessExpr && ((FieldAccessExpr) firstNode).getScope() instanceof ThisExpr) {
        result = of(fieldAccessExpr((FieldAccessExpr) firstNode, originalTypeCursor));
    } else if (firstNode instanceof MethodCallExpr) {
        result = of(methodCallExpr((MethodCallExpr) firstNode, originalTypeCursor, new NameExpr("_this")));
    } else if (firstNode instanceof StringLiteralExpr) {
        result = of(stringLiteralExpr((StringLiteralExpr) firstNode));
    } else if (firstNode instanceof EnclosedExpr) {
        result = processFirstNode(drlxExpr, childNodes, ((EnclosedExpr) firstNode).getInner(), isInLineCast, originalTypeCursor);
    } else if (firstNode instanceof CastExpr) {
        result = castExpr((CastExpr) firstNode, drlxExpr, childNodes, isInLineCast, originalTypeCursor);
    } else if (firstNode instanceof ArrayCreationExpr) {
        result = of(arrayCreationExpr(((ArrayCreationExpr) firstNode)));
    } else if (firstNode instanceof BinaryExpr) {
        result = of(binaryExpr((BinaryExpr) firstNode));
    } else {
        result = of(new TypedExpressionCursor((Expression) firstNode, getExpressionType(ruleContext, ruleContext.getTypeResolver(), (Expression) firstNode, context.getUsedDeclarations())));
    }
    result.ifPresent(te -> {
        if (drlxExpr instanceof NullSafeFieldAccessExpr) {
            extractPrefixExpressions((NullSafeFieldAccessExpr) drlxExpr, te.expressionCursor);
        }
    });
    return result.map(te -> {
        if (isInLineCast) {
            Expression exprWithInlineCast = addCastToExpression(te.typeCursor, te.expressionCursor, isInLineCast);
            return new TypedExpressionCursor(exprWithInlineCast, te.typeCursor);
        } else {
            return te;
        }
    });
}
Also used : BinaryExpr(org.drools.javaparser.ast.expr.BinaryExpr) HalfBinaryExpr(org.drools.javaparser.ast.drlx.expr.HalfBinaryExpr) NameExpr(org.drools.javaparser.ast.expr.NameExpr) StringLiteralExpr(org.drools.javaparser.ast.expr.StringLiteralExpr) NullSafeFieldAccessExpr(org.drools.javaparser.ast.drlx.expr.NullSafeFieldAccessExpr) Expression(org.drools.javaparser.ast.expr.Expression) TypedExpression(org.drools.modelcompiler.builder.generator.TypedExpression) CastExpr(org.drools.javaparser.ast.expr.CastExpr) InlineCastExpr(org.drools.javaparser.ast.drlx.expr.InlineCastExpr) NullSafeFieldAccessExpr(org.drools.javaparser.ast.drlx.expr.NullSafeFieldAccessExpr) FieldAccessExpr(org.drools.javaparser.ast.expr.FieldAccessExpr) EnclosedExpr(org.drools.javaparser.ast.expr.EnclosedExpr) ArrayCreationExpr(org.drools.javaparser.ast.expr.ArrayCreationExpr) ThisExpr(org.drools.javaparser.ast.expr.ThisExpr) DrlxParseUtil.nameExprToMethodCallExpr(org.drools.modelcompiler.builder.generator.DrlxParseUtil.nameExprToMethodCallExpr) MethodCallExpr(org.drools.javaparser.ast.expr.MethodCallExpr)

Aggregations

EnclosedExpr (org.drools.javaparser.ast.expr.EnclosedExpr)7 Expression (org.drools.javaparser.ast.expr.Expression)7 NameExpr (org.drools.javaparser.ast.expr.NameExpr)7 MethodCallExpr (org.drools.javaparser.ast.expr.MethodCallExpr)6 TypedExpression (org.drools.modelcompiler.builder.generator.TypedExpression)6 BinaryExpr (org.drools.javaparser.ast.expr.BinaryExpr)5 FieldAccessExpr (org.drools.javaparser.ast.expr.FieldAccessExpr)5 Optional (java.util.Optional)4 ArrayList (java.util.ArrayList)3 List (java.util.List)3 HalfBinaryExpr (org.drools.javaparser.ast.drlx.expr.HalfBinaryExpr)3 CastExpr (org.drools.javaparser.ast.expr.CastExpr)3 StringLiteralExpr (org.drools.javaparser.ast.expr.StringLiteralExpr)3 ThisExpr (org.drools.javaparser.ast.expr.ThisExpr)3 UnaryExpr (org.drools.javaparser.ast.expr.UnaryExpr)3 PackageModel (org.drools.modelcompiler.builder.PackageModel)3 DeclarationSpec (org.drools.modelcompiler.builder.generator.DeclarationSpec)3 RuleContext (org.drools.modelcompiler.builder.generator.RuleContext)3 JavaParser (org.drools.javaparser.JavaParser)2 NodeList (org.drools.javaparser.ast.NodeList)2