Search in sources :

Example 31 with SimpleName

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

the class ConstraintUtil method inverseMethodCallExpr.

private static void inverseMethodCallExpr(MethodCallExpr mcExpr) {
    String mcExprName = mcExpr.getName().asString();
    String methodName = mcExprName.substring(CLASS_NAME.length(), mcExprName.length());
    NodeList<Expression> arguments = mcExpr.getArguments();
    if (methodName.startsWith(GREATER_THAN_PREFIX)) {
        methodName = methodName.replaceFirst(GREATER_THAN_PREFIX, LESS_THAN_PREFIX);
    } else if (methodName.startsWith(GREATER_OR_EQUAL_PREFIX)) {
        methodName = methodName.replaceFirst(GREATER_OR_EQUAL_PREFIX, LESS_OR_EQUAL_PREFIX);
    } else if (methodName.startsWith(LESS_THAN_PREFIX)) {
        methodName = methodName.replaceFirst(LESS_THAN_PREFIX, GREATER_THAN_PREFIX);
    } else if (methodName.startsWith(LESS_OR_EQUAL_PREFIX)) {
        methodName = methodName.replaceFirst(LESS_OR_EQUAL_PREFIX, GREATER_OR_EQUAL_PREFIX);
    }
    mcExpr.setName(new SimpleName(CLASS_NAME + methodName));
    Expression firstArg = arguments.get(0);
    mcExpr.setArgument(0, arguments.get(1));
    mcExpr.setArgument(1, firstArg);
}
Also used : Expression(com.github.javaparser.ast.expr.Expression) SimpleName(com.github.javaparser.ast.expr.SimpleName)

Example 32 with SimpleName

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

the class ConsequenceGenerator method replaceGenericType.

private static void replaceGenericType(int arity, ClassOrInterfaceDeclaration clone, ConstructorDeclaration constructor) {
    List<TypeParameter> genericTypeParameterList = genericTypeStream(arity, ConsequenceGenerator::createTypeParameter).collect(Collectors.toList());
    clone.setTypeParameters(nodeList(genericTypeParameterList));
    List<Type> genericTypeList = genericTypeStream(arity, ConsequenceGenerator::parseType).collect(Collectors.toList());
    ClassOrInterfaceType extendTypeParameter = toClassOrInterfaceType(arityName(arity));
    extendTypeParameter.setTypeArguments(nodeList(genericTypeList));
    ClassOrInterfaceType extendedType = new ClassOrInterfaceType(null, new SimpleName("AbstractValidBuilder"), nodeList(extendTypeParameter));
    clone.findAll(MethodDeclaration.class, mc -> mc.getType().asString().equals(arityName(arity))).forEach(c -> c.setType(extendTypeParameter));
    clone.setExtendedTypes(nodeList(extendedType));
    List<Parameter> parameters = genericTypeStream(arity, genericTypeIndex -> {
        ClassOrInterfaceType type = toClassOrInterfaceType(String.format("Variable<%s>", argumentTypeName(genericTypeIndex)));
        return new Parameter(type, argName(genericTypeIndex));
    }).collect(Collectors.toList());
    constructor.setParameters(nodeList(parameters));
    constructorBody(arity, constructor);
    ClassOrInterfaceType arityBlockType = toClassOrInterfaceType("Block" + arity);
    arityBlockType.setTypeArguments(nodeList(genericTypeList));
    ClassOrInterfaceType arityBlockTypePlusOne = toClassOrInterfaceType("Block" + (arity + 1));
    List<Type> genericTypeListPlusDrools = new ArrayList<>(genericTypeList);
    genericTypeListPlusDrools.add(0, toClassOrInterfaceType("Drools"));
    arityBlockTypePlusOne.setTypeArguments(nodeList(genericTypeListPlusDrools));
    clone.findAll(ClassOrInterfaceType.class, findNodeWithNameArityClassName(ARITY_CLASS_BLOCK)).forEach(oldType -> oldType.replace(arityBlockType));
    clone.findAll(ClassOrInterfaceType.class, findNodeWithNameArityClassName(ARITY_CLASS_BLOCK_PLUS_ONE)).forEach(oldType -> oldType.replace(arityBlockTypePlusOne));
}
Also used : IntStream(java.util.stream.IntStream) ClassOrInterfaceType(com.github.javaparser.ast.type.ClassOrInterfaceType) ExpressionStmt(com.github.javaparser.ast.stmt.ExpressionStmt) Parameter(com.github.javaparser.ast.body.Parameter) NodeList.nodeList(com.github.javaparser.ast.NodeList.nodeList) ArrayList(java.util.ArrayList) ConstructorDeclaration(com.github.javaparser.ast.body.ConstructorDeclaration) NodeWithSimpleName(com.github.javaparser.ast.nodeTypes.NodeWithSimpleName) Type(com.github.javaparser.ast.type.Type) Expression(com.github.javaparser.ast.expr.Expression) CompilationUnit(com.github.javaparser.ast.CompilationUnit) IntFunction(java.util.function.IntFunction) SimpleName(com.github.javaparser.ast.expr.SimpleName) Predicate(java.util.function.Predicate) TypeParameter(com.github.javaparser.ast.type.TypeParameter) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr) DrlxParseUtil.toClassOrInterfaceType(org.drools.modelcompiler.builder.generator.DrlxParseUtil.toClassOrInterfaceType) NameExpr(com.github.javaparser.ast.expr.NameExpr) Collectors(java.util.stream.Collectors) List(java.util.List) StaticJavaParser(com.github.javaparser.StaticJavaParser) Stream(java.util.stream.Stream) MethodDeclaration(com.github.javaparser.ast.body.MethodDeclaration) BlockStmt(com.github.javaparser.ast.stmt.BlockStmt) ClassOrInterfaceDeclaration(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) TypeParameter(com.github.javaparser.ast.type.TypeParameter) ClassOrInterfaceType(com.github.javaparser.ast.type.ClassOrInterfaceType) Type(com.github.javaparser.ast.type.Type) DrlxParseUtil.toClassOrInterfaceType(org.drools.modelcompiler.builder.generator.DrlxParseUtil.toClassOrInterfaceType) MethodDeclaration(com.github.javaparser.ast.body.MethodDeclaration) NodeWithSimpleName(com.github.javaparser.ast.nodeTypes.NodeWithSimpleName) SimpleName(com.github.javaparser.ast.expr.SimpleName) ArrayList(java.util.ArrayList) Parameter(com.github.javaparser.ast.body.Parameter) TypeParameter(com.github.javaparser.ast.type.TypeParameter) ClassOrInterfaceType(com.github.javaparser.ast.type.ClassOrInterfaceType) DrlxParseUtil.toClassOrInterfaceType(org.drools.modelcompiler.builder.generator.DrlxParseUtil.toClassOrInterfaceType)

Example 33 with SimpleName

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

the class DroolsMvelParserTest method testBindVariable.

@Test
public void testBindVariable() {
    String expr = "$n : name == \"Mark\"";
    DrlxExpression drlxExpression = parseExpression(parser, expr);
    SimpleName bind = drlxExpression.getBind();
    assertEquals("$n", bind.asString());
    Expression expression = drlxExpression.getExpr();
    BinaryExpr binaryExpr = ((BinaryExpr) expression);
    assertEquals("name", toString(binaryExpr.getLeft()));
    assertEquals("\"Mark\"", 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) Test(org.junit.Test)

Example 34 with SimpleName

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

the class AstUtils method parseBindingAfterAnd.

public static DrlxExpression parseBindingAfterAnd(TokenRange tokenRange, DrlxExpression leftExpr, Expression rightExpr) {
    if (leftExpr.getExpr() instanceof BinaryExpr && ((BinaryExpr) leftExpr.getExpr()).getOperator() == BinaryExpr.Operator.AND) {
        if (((BinaryExpr) leftExpr.getExpr()).getRight() instanceof NameExpr) {
            DrlxExpression newLeft = new DrlxExpression(leftExpr.getBind(), ((BinaryExpr) leftExpr.getExpr()).getLeft());
            SimpleName rightName = ((NameExpr) ((BinaryExpr) leftExpr.getExpr()).getRight()).getName();
            DrlxExpression newRight = new DrlxExpression(rightName, rightExpr);
            return new DrlxExpression(null, new BinaryExpr(tokenRange, newLeft, newRight, BinaryExpr.Operator.AND));
        }
        if (((BinaryExpr) leftExpr.getExpr()).getRight() instanceof DrlxExpression) {
            Expression first = ((BinaryExpr) leftExpr.getExpr()).getLeft();
            DrlxExpression innerRight = parseBindingAfterAnd(tokenRange, (DrlxExpression) ((BinaryExpr) leftExpr.getExpr()).getRight(), rightExpr);
            Expression second = ((BinaryExpr) innerRight.getExpr()).getLeft();
            Expression third = ((BinaryExpr) innerRight.getExpr()).getRight();
            return new DrlxExpression(null, new BinaryExpr(tokenRange, new BinaryExpr(tokenRange, first, second, BinaryExpr.Operator.AND), third, BinaryExpr.Operator.AND));
        }
    }
    throw new IllegalStateException();
}
Also used : Expression(com.github.javaparser.ast.expr.Expression) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) HalfBinaryExpr(org.drools.mvel.parser.ast.expr.HalfBinaryExpr) BinaryExpr(com.github.javaparser.ast.expr.BinaryExpr) DrlxExpression(org.drools.mvel.parser.ast.expr.DrlxExpression) SimpleName(com.github.javaparser.ast.expr.SimpleName) NameExpr(com.github.javaparser.ast.expr.NameExpr)

Aggregations

SimpleName (com.github.javaparser.ast.expr.SimpleName)34 Test (org.junit.Test)17 Expression (com.github.javaparser.ast.expr.Expression)15 NameExpr (com.github.javaparser.ast.expr.NameExpr)11 MethodDeclaration (com.github.javaparser.ast.body.MethodDeclaration)9 BinaryExpr (com.github.javaparser.ast.expr.BinaryExpr)9 MethodCallExpr (com.github.javaparser.ast.expr.MethodCallExpr)9 ArrayList (java.util.ArrayList)8 List (java.util.List)8 HalfBinaryExpr (org.drools.mvel.parser.ast.expr.HalfBinaryExpr)8 Parameter (com.github.javaparser.ast.body.Parameter)7 NodeList (com.github.javaparser.ast.NodeList)6 BlockStmt (com.github.javaparser.ast.stmt.BlockStmt)6 Node (com.github.javaparser.ast.Node)5 ConstructorDeclaration (com.github.javaparser.ast.body.ConstructorDeclaration)5 EnclosedExpr (com.github.javaparser.ast.expr.EnclosedExpr)5 ClassOrInterfaceType (com.github.javaparser.ast.type.ClassOrInterfaceType)5 HashMap (java.util.HashMap)5 DrlxExpression (org.drools.mvel.parser.ast.expr.DrlxExpression)5 CompilationUnit (com.github.javaparser.ast.CompilationUnit)4