Search in sources :

Example 86 with Node

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

the class AccumulateInline method parseAccumulatePattern.

void parseAccumulatePattern() {
    PatternDescr pattern = accumulateDescr.getInputPattern();
    if (pattern == null || pattern.getSource() == null) {
        return;
    }
    PatternSourceDescr sourceDescr = pattern.getSource();
    if (sourceDescr instanceof FromDescr) {
        DeclarativeInvokerDescr invokerDescr = ((FromDescr) sourceDescr).getDataSource();
        String mvelBlock = addCurlyBracesToBlock(addSemicolon(invokerDescr.getText()));
        CompiledBlockResult fromCodeCompilationResult = mvelCompiler.compileStatement(mvelBlock);
        BlockStmt fromBlock = fromCodeCompilationResult.statementResults();
        for (Statement stmt : fromBlock.getStatements()) {
            stmt.findAll(NameExpr.class).stream().map(Node::toString).filter(context::hasDeclaration).forEach(usedExternalDeclarations::add);
        }
    }
}
Also used : PatternDescr(org.drools.drl.ast.descr.PatternDescr) StaticJavaParser.parseStatement(com.github.javaparser.StaticJavaParser.parseStatement) Statement(com.github.javaparser.ast.stmt.Statement) PatternSourceDescr(org.drools.drl.ast.descr.PatternSourceDescr) BlockStmt(com.github.javaparser.ast.stmt.BlockStmt) Node(com.github.javaparser.ast.Node) FromDescr(org.drools.drl.ast.descr.FromDescr) CompiledBlockResult(org.drools.mvelcompiler.CompiledBlockResult) DeclarativeInvokerDescr(org.drools.drl.ast.descr.DeclarativeInvokerDescr)

Example 87 with Node

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

the class FlattenScope method flattenScope.

public static List<Node> flattenScope(TypeResolver typeResolver, Expression expressionWithScope) {
    List<Node> res = new ArrayList<>();
    if (expressionWithScope instanceof FullyQualifiedInlineCastExpr) {
        res.addAll(flattenScope(typeResolver, transformFullyQualifiedInlineCastExpr(typeResolver, (FullyQualifiedInlineCastExpr) expressionWithScope)));
    } else if (expressionWithScope instanceof FieldAccessExpr) {
        FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) expressionWithScope;
        res.addAll(flattenScope(typeResolver, fieldAccessExpr.getScope()));
        res.add(fieldAccessExpr.getName());
    } else if (expressionWithScope instanceof NullSafeFieldAccessExpr) {
        NullSafeFieldAccessExpr fieldAccessExpr = (NullSafeFieldAccessExpr) expressionWithScope;
        res.addAll(flattenScope(typeResolver, fieldAccessExpr.getScope()));
        res.add(fieldAccessExpr.getName());
    } else if (expressionWithScope instanceof MethodCallExpr) {
        MethodCallExpr methodCallExpr = (MethodCallExpr) expressionWithScope;
        if (methodCallExpr.getScope().isPresent()) {
            Expression scope = methodCallExpr.getScope().get();
            if (isFullyQualifiedClassName(typeResolver, scope)) {
                res.add(scope);
            } else {
                res.addAll(flattenScope(typeResolver, scope));
            }
        }
        res.add(methodCallExpr);
    } else if (expressionWithScope instanceof NullSafeMethodCallExpr) {
        NullSafeMethodCallExpr methodCallExpr = (NullSafeMethodCallExpr) expressionWithScope;
        if (methodCallExpr.getScope().isPresent()) {
            res.addAll(flattenScope(typeResolver, methodCallExpr.getScope().orElseThrow(() -> new IllegalStateException("Scope expression is not present!"))));
        }
        res.add(methodCallExpr);
    } else if (expressionWithScope instanceof InlineCastExpr && ((InlineCastExpr) expressionWithScope).getExpression() instanceof FieldAccessExpr) {
        InlineCastExpr inlineCastExpr = (InlineCastExpr) expressionWithScope;
        Expression internalScope = ((FieldAccessExpr) inlineCastExpr.getExpression()).getScope();
        res.addAll(flattenScope(typeResolver, internalScope));
        res.add(expressionWithScope);
    } else if (expressionWithScope instanceof ArrayAccessExpr) {
        ArrayAccessExpr arrayAccessExpr = (ArrayAccessExpr) expressionWithScope;
        res.addAll(flattenScope(typeResolver, arrayAccessExpr.getName()));
        res.add(arrayAccessExpr);
    } else if (expressionWithScope instanceof EnclosedExpr) {
        res.addAll(flattenScope(typeResolver, ((EnclosedExpr) expressionWithScope).getInner()));
    } else {
        res.add(expressionWithScope);
    }
    return res;
}
Also used : ArrayAccessExpr(com.github.javaparser.ast.expr.ArrayAccessExpr) Node(com.github.javaparser.ast.Node) ArrayList(java.util.ArrayList) FullyQualifiedInlineCastExpr(org.drools.mvel.parser.ast.expr.FullyQualifiedInlineCastExpr) InlineCastExpr(org.drools.mvel.parser.ast.expr.InlineCastExpr) NullSafeFieldAccessExpr(org.drools.mvel.parser.ast.expr.NullSafeFieldAccessExpr) Expression(com.github.javaparser.ast.expr.Expression) NullSafeFieldAccessExpr(org.drools.mvel.parser.ast.expr.NullSafeFieldAccessExpr) FieldAccessExpr(com.github.javaparser.ast.expr.FieldAccessExpr) NullSafeMethodCallExpr(org.drools.mvel.parser.ast.expr.NullSafeMethodCallExpr) EnclosedExpr(com.github.javaparser.ast.expr.EnclosedExpr) FullyQualifiedInlineCastExpr(org.drools.mvel.parser.ast.expr.FullyQualifiedInlineCastExpr) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr) NullSafeMethodCallExpr(org.drools.mvel.parser.ast.expr.NullSafeMethodCallExpr)

Example 88 with Node

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

the class DrlxParseUtil method findAllChildrenRecursiveRec.

private static void findAllChildrenRecursiveRec(List<Node> accumulator, Node e) {
    for (Node child : e.getChildNodes()) {
        accumulator.add(child);
        findAllChildrenRecursiveRec(accumulator, child);
    }
}
Also used : Node(com.github.javaparser.ast.Node)

Example 89 with Node

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

the class DrlxParseUtil method trasformHalfBinaryToBinary.

public static Expression trasformHalfBinaryToBinary(Expression drlxExpr) {
    final Optional<Node> parent = drlxExpr.getParentNode();
    if (drlxExpr instanceof HalfBinaryExpr && parent.isPresent()) {
        HalfBinaryExpr halfBinaryExpr = (HalfBinaryExpr) drlxExpr;
        Expression parentLeft = findLeftLeafOfNameExprTraversingParent(halfBinaryExpr);
        Operator operator = toBinaryExprOperator(halfBinaryExpr.getOperator());
        return new BinaryExpr(parentLeft, halfBinaryExpr.getRight(), operator);
    }
    return drlxExpr;
}
Also used : Operator(com.github.javaparser.ast.expr.BinaryExpr.Operator) HalfBinaryExpr(org.drools.mvel.parser.ast.expr.HalfBinaryExpr) Expression(com.github.javaparser.ast.expr.Expression) ListCreationLiteralExpression(org.drools.mvel.parser.ast.expr.ListCreationLiteralExpression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) MapCreationLiteralExpression(org.drools.mvel.parser.ast.expr.MapCreationLiteralExpression) Node(com.github.javaparser.ast.Node) BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) HalfBinaryExpr(org.drools.mvel.parser.ast.expr.HalfBinaryExpr)

Example 90 with Node

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

the class FlattenScopeTest method flattenArrayAccess.

@Test
public void flattenArrayAccess() {
    List<Node> actual = flattenScope(MockTypeResolver.INSTANCE, expr("$p.getChildrenA()[0]"));
    NameExpr name = new NameExpr("$p");
    final MethodCallExpr mc = new MethodCallExpr(name, "getChildrenA", nodeList());
    mc.setTypeArguments(NodeList.nodeList());
    List<Node> expected = asList(name, mc, new ArrayAccessExpr(mc, new IntegerLiteralExpr(0)));
    compareArrays(actual, expected);
}
Also used : IntegerLiteralExpr(com.github.javaparser.ast.expr.IntegerLiteralExpr) ArrayAccessExpr(com.github.javaparser.ast.expr.ArrayAccessExpr) Node(com.github.javaparser.ast.Node) NameExpr(com.github.javaparser.ast.expr.NameExpr) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr) Test(org.junit.Test)

Aggregations

Node (com.github.javaparser.ast.Node)95 Test (org.junit.Test)24 Expression (com.github.javaparser.ast.expr.Expression)22 NodeList (com.github.javaparser.ast.NodeList)18 Comment (com.github.javaparser.ast.comments.Comment)13 CompilationUnit (com.github.javaparser.ast.CompilationUnit)12 MethodCallExpr (com.github.javaparser.ast.expr.MethodCallExpr)12 NameExpr (com.github.javaparser.ast.expr.NameExpr)12 BlockStmt (com.github.javaparser.ast.stmt.BlockStmt)12 ArrayList (java.util.ArrayList)11 StringLiteralExpr (com.github.javaparser.ast.expr.StringLiteralExpr)8 Collectors (java.util.stream.Collectors)8 MethodDeclaration (com.github.javaparser.ast.body.MethodDeclaration)7 LineComment (com.github.javaparser.ast.comments.LineComment)7 BinaryExpr (com.github.javaparser.ast.expr.BinaryExpr)7 EnclosedExpr (com.github.javaparser.ast.expr.EnclosedExpr)7 SimpleName (com.github.javaparser.ast.expr.SimpleName)7 HalfBinaryExpr (org.drools.mvel.parser.ast.expr.HalfBinaryExpr)7 VariableDeclarator (com.github.javaparser.ast.body.VariableDeclarator)6 AssignExpr (com.github.javaparser.ast.expr.AssignExpr)6