Search in sources :

Example 6 with EnclosedExpr

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

the class ConstraintUtil method processExpression.

private static void processExpression(Expression expr) {
    if (expr instanceof MethodCallExpr) {
        MethodCallExpr mcExpr = (MethodCallExpr) expr;
        if (canInverse(mcExpr)) {
            inverseMethodCallExpr(mcExpr);
        }
    } else if (expr instanceof BinaryExpr) {
        BinaryExpr bExpr = (BinaryExpr) expr;
        if (bExpr.getOperator() == BinaryExpr.Operator.AND || bExpr.getOperator() == BinaryExpr.Operator.OR) {
            Expression left = bExpr.getLeft();
            processExpression(left);
            Expression right = bExpr.getRight();
            processExpression(right);
        }
    } else if (expr instanceof UnaryExpr) {
        Expression expression = ((UnaryExpr) expr).getExpression();
        processExpression(expression);
    } else if (expr instanceof EnclosedExpr) {
        Expression inner = ((EnclosedExpr) expr).getInner();
        processExpression(inner);
    }
}
Also used : Expression(com.github.javaparser.ast.expr.Expression) BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr) DrlxParseUtil.stripEnclosedExpr(org.drools.modelcompiler.builder.generator.DrlxParseUtil.stripEnclosedExpr) UnaryExpr(com.github.javaparser.ast.expr.UnaryExpr) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr)

Example 7 with EnclosedExpr

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

the class DroolsMvelParserTest method testEnclosedBindVariable.

@Test
public void testEnclosedBindVariable() {
    String expr = "($n : name == \"Mario\")";
    DrlxExpression drlxExpression = parseExpression(parser, expr);
    Expression enclosedExpr = drlxExpression.getExpr();
    assertTrue(enclosedExpr instanceof EnclosedExpr);
    Expression inner = ((EnclosedExpr) enclosedExpr).getInner();
    assertTrue(inner instanceof DrlxExpression);
    DrlxExpression innerDrlxExpression = (DrlxExpression) inner;
    SimpleName bind = innerDrlxExpression.getBind();
    assertEquals("$n", bind.asString());
    Expression expression = innerDrlxExpression.getExpr();
    BinaryExpr binaryExpr = ((BinaryExpr) expression);
    assertEquals("name", toString(binaryExpr.getLeft()));
    assertEquals("\"Mario\"", toString(binaryExpr.getRight()));
    assertEquals(Operator.EQUALS, binaryExpr.getOperator());
}
Also used : DrlxParser.parseExpression(org.drools.mvel.parser.DrlxParser.parseExpression) Expression(com.github.javaparser.ast.expr.Expression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) SimpleName(com.github.javaparser.ast.expr.SimpleName) BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) HalfBinaryExpr(org.drools.mvel.parser.ast.expr.HalfBinaryExpr) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr) Test(org.junit.Test)

Example 8 with EnclosedExpr

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

the class DroolsMvelParserTest method testComplexEnclosedBindVariable.

@Test
public void testComplexEnclosedBindVariable() {
    String expr = "($n : name == \"Mario\") && (age > 20)";
    DrlxExpression drlxExpression = parseExpression(parser, expr);
    Expression bExpr = drlxExpression.getExpr();
    assertTrue(bExpr instanceof BinaryExpr);
    Node left = ((BinaryExpr) bExpr).getLeft();
    assertTrue(left instanceof EnclosedExpr);
    Expression inner = ((EnclosedExpr) left).getInner();
    assertTrue(inner instanceof DrlxExpression);
    DrlxExpression innerDrlxExpression = (DrlxExpression) inner;
    SimpleName bind = innerDrlxExpression.getBind();
    assertEquals("$n", bind.asString());
    Expression expression = innerDrlxExpression.getExpr();
    BinaryExpr binaryExpr = ((BinaryExpr) expression);
    assertEquals("name", toString(binaryExpr.getLeft()));
    assertEquals("\"Mario\"", toString(binaryExpr.getRight()));
    assertEquals(Operator.EQUALS, binaryExpr.getOperator());
    Node right = ((BinaryExpr) bExpr).getRight();
    assertTrue(right instanceof EnclosedExpr);
    Expression expression2 = ((EnclosedExpr) right).getInner();
    BinaryExpr binaryExpr2 = ((BinaryExpr) expression2);
    assertEquals("age", toString(binaryExpr2.getLeft()));
    assertEquals("20", toString(binaryExpr2.getRight()));
    assertEquals(Operator.GREATER, binaryExpr2.getOperator());
}
Also used : DrlxParser.parseExpression(org.drools.mvel.parser.DrlxParser.parseExpression) Expression(com.github.javaparser.ast.expr.Expression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) HalfBinaryExpr(org.drools.mvel.parser.ast.expr.HalfBinaryExpr) PrintUtil.printNode(org.drools.mvel.parser.printer.PrintUtil.printNode) Node(com.github.javaparser.ast.Node) SimpleName(com.github.javaparser.ast.expr.SimpleName) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr) Test(org.junit.Test)

Example 9 with EnclosedExpr

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

the class ASTCompilerVisitor method visit.

@Override
public DirectCompilerResult visit(IfExpressionNode n) {
    DirectCompilerResult condition = n.getCondition().accept(this);
    DirectCompilerResult thenExpr = n.getThenExpression().accept(this);
    DirectCompilerResult elseExpr = n.getElseExpression().accept(this);
    return DirectCompilerResult.of(new ConditionalExpr(new BinaryExpr(Expressions.nativeInstanceOf(Constants.BooleanT, condition.getExpression()), Expressions.reflectiveCastTo(Constants.BooleanT, condition.getExpression()), BinaryExpr.Operator.AND), new EnclosedExpr(thenExpr.getExpression()), new EnclosedExpr(elseExpr.getExpression())), // should find common type between then/else
    thenExpr.resultType).withFD(condition).withFD(thenExpr).withFD(elseExpr);
}
Also used : BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) ConditionalExpr(com.github.javaparser.ast.expr.ConditionalExpr) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr)

Example 10 with EnclosedExpr

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

the class CompilerBytecodeLoader method getCompilationUnit.

public <T> CompilationUnit getCompilationUnit(Class<T> clazz, String templateResourcePath, String cuPackage, String cuClass, String feelExpression, Expression theExpression, Set<FieldDeclaration> fieldDeclarations) {
    CompilationUnit cu = parse(CompilerBytecodeLoader.class.getResourceAsStream(templateResourcePath));
    cu.setPackageDeclaration(cuPackage);
    final String className = templateResourcePath.substring(1, templateResourcePath.length() - 5);
    ClassOrInterfaceDeclaration classSource = cu.getClassByName(className).orElseThrow(() -> new IllegalArgumentException("Cannot find class by name " + className));
    classSource.setName(cuClass);
    MethodDeclaration lookupMethod = cu.findFirst(MethodDeclaration.class).orElseThrow(() -> new RuntimeException("Something unexpected changed in the template."));
    lookupMethod.setComment(new JavadocComment("   FEEL: " + feelExpression + "   "));
    ReturnStmt returnStmt = lookupMethod.findFirst(ReturnStmt.class).orElseThrow(() -> new RuntimeException("Something unexpected changed in the template."));
    Expression expr;
    if (clazz.equals(CompiledFEELUnaryTests.class)) {
        expr = new CastExpr(StaticJavaParser.parseType("java.util.List"), new EnclosedExpr(theExpression));
    } else {
        expr = theExpression;
    }
    returnStmt.setExpression(expr);
    List<ClassOrInterfaceDeclaration> classDecls = cu.findAll(ClassOrInterfaceDeclaration.class);
    if (classDecls.size() != 1) {
        throw new RuntimeException("Something unexpected changed in the template.");
    }
    ClassOrInterfaceDeclaration classDecl = classDecls.get(0);
    fieldDeclarations.stream().filter(fd -> !isUnaryTest(fd)).sorted(new SortFieldDeclarationStrategy()).forEach(classDecl::addMember);
    fieldDeclarations.stream().filter(fd -> fd.getVariable(0).getName().asString().startsWith("UT")).sorted(new SortFieldDeclarationStrategy()).forEach(classDecl::addMember);
    if (generateClassListener != null) {
        generateClassListener.generatedClass(cu);
    }
    LOG.debug("{}", cu);
    return cu;
}
Also used : CompilationUnit(com.github.javaparser.ast.CompilationUnit) ClassOrInterfaceDeclaration(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) MethodDeclaration(com.github.javaparser.ast.body.MethodDeclaration) JavadocComment(com.github.javaparser.ast.comments.JavadocComment) Expression(com.github.javaparser.ast.expr.Expression) CastExpr(com.github.javaparser.ast.expr.CastExpr) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr) ReturnStmt(com.github.javaparser.ast.stmt.ReturnStmt)

Aggregations

EnclosedExpr (com.github.javaparser.ast.expr.EnclosedExpr)25 Expression (com.github.javaparser.ast.expr.Expression)22 BinaryExpr (com.github.javaparser.ast.expr.BinaryExpr)12 DrlxExpression (org.drools.mvel.parser.ast.expr.DrlxExpression)9 HalfBinaryExpr (org.drools.mvel.parser.ast.expr.HalfBinaryExpr)9 MethodCallExpr (com.github.javaparser.ast.expr.MethodCallExpr)8 TypedExpression (org.drools.modelcompiler.builder.generator.TypedExpression)8 CastExpr (com.github.javaparser.ast.expr.CastExpr)7 NameExpr (com.github.javaparser.ast.expr.NameExpr)7 DrlNameExpr (org.drools.mvel.parser.ast.expr.DrlNameExpr)7 Node (com.github.javaparser.ast.Node)6 FieldAccessExpr (com.github.javaparser.ast.expr.FieldAccessExpr)6 UnaryExpr (com.github.javaparser.ast.expr.UnaryExpr)6 ArrayList (java.util.ArrayList)6 DrlxParseUtil.stripEnclosedExpr (org.drools.modelcompiler.builder.generator.DrlxParseUtil.stripEnclosedExpr)6 ParseExpressionErrorResult (org.drools.modelcompiler.builder.errors.ParseExpressionErrorResult)5 SimpleName (com.github.javaparser.ast.expr.SimpleName)4 ThisExpr (com.github.javaparser.ast.expr.ThisExpr)4 Optional (java.util.Optional)4 DrlxParseUtil.toClassOrInterfaceType (org.drools.modelcompiler.builder.generator.DrlxParseUtil.toClassOrInterfaceType)4