use of com.github.javaparser.ast.nodeTypes.NodeWithOptionalScope in project drools by kiegroup.
the class LambdaUtil method appendNewLambdaToOld.
public static Expression appendNewLambdaToOld(LambdaExpr l1, LambdaExpr l2) {
ExpressionStmt l1ExprStmt = (ExpressionStmt) l1.getBody();
ExpressionStmt l2ExprStmt = (ExpressionStmt) l2.getBody();
DrlxParseUtil.RemoveRootNodeResult removeRootNodeResult = DrlxParseUtil.removeRootNode(l2ExprStmt.getExpression());
NodeWithOptionalScope<?> newExpr = (NodeWithOptionalScope<?>) removeRootNodeResult.getFirstChild();
newExpr.setScope(l1ExprStmt.getExpression());
l1.setBody(new ExpressionStmt(removeRootNodeResult.getWithoutRootNode()));
return l1;
}
use of com.github.javaparser.ast.nodeTypes.NodeWithOptionalScope in project drools by kiegroup.
the class DrlxParseUtil method findRootNodeViaScopeRec.
private static RemoveRootNodeResult findRootNodeViaScopeRec(Expression expr, LinkedList<Expression> acc) {
if (expr.isArrayAccessExpr()) {
throw new RuntimeException("This doesn't work on arrayAccessExpr convert them to a method call");
}
if (expr instanceof EnclosedExpr) {
return findRootNodeViaScopeRec(expr.asEnclosedExpr().getInner(), acc);
} else if (expr instanceof CastExpr) {
return findRootNodeViaScopeRec(expr.asCastExpr().getExpression(), acc);
} else if (expr instanceof ThisExpr) {
return new RemoveRootNodeResult(Optional.of(expr), expr, expr);
} else if (expr instanceof NodeWithTraversableScope) {
final NodeWithTraversableScope exprWithScope = (NodeWithTraversableScope) expr;
return exprWithScope.traverseScope().flatMap((Expression scope) -> {
if (isDslTopLevelNamespace(scope)) {
return empty();
}
Expression sanitizedExpr = DrlxParseUtil.transformDrlNameExprToNameExpr(expr);
acc.addLast(sanitizedExpr.clone());
return of(findRootNodeViaScopeRec(scope, acc));
}).orElse(new RemoveRootNodeResult(Optional.of(expr), expr, acc.isEmpty() ? expr : acc.getLast()));
} else if (expr instanceof NameExpr) {
if (!acc.isEmpty() && acc.getLast() instanceof NodeWithOptionalScope<?>) {
((NodeWithOptionalScope<?>) acc.getLast()).setScope(null);
for (ListIterator<Expression> iterator = acc.listIterator(); iterator.hasNext(); ) {
Expression e = iterator.next();
if (e instanceof NodeWithOptionalScope) {
NodeWithOptionalScope<?> node = (NodeWithOptionalScope<?>) e;
if (iterator.hasNext()) {
node.setScope(acc.get(iterator.nextIndex()));
}
}
}
return new RemoveRootNodeResult(Optional.of(expr), acc.getFirst(), acc.getLast());
} else {
return new RemoveRootNodeResult(Optional.of(expr), expr, expr);
}
}
return new RemoveRootNodeResult(empty(), expr, expr);
}
Aggregations