public static DirectCompilerResult declaration(FunctionDefNode n, MethodCallExpr list, Expression fnBody) { LambdaExpr lambda = Expressions.lambda(fnBody); String fnName = Constants.functionName(n.getBody().getText()); DirectCompilerResult r = DirectCompilerResult.of( Functions.internal(list, new NameExpr(fnName)), BuiltInType.FUNCTION); r.addFieldDesclaration(Constants.function(fnName, lambda)); return r; }
@Override public DirectCompilerResult visit(UnaryTestNode n) { DirectCompilerResult value = n.getValue().accept(this); Expression expr = Expressions.unary(n.getOperator(), value.getExpression()); Expressions.NamedLambda namedLambda = Expressions.namedUnaryLambda(expr, n.getText()); DirectCompilerResult r = DirectCompilerResult.of(namedLambda.name(), BuiltInType.UNARY_TEST) .withFD(value); r.addFieldDesclaration(namedLambda.field()); return r; } }
@Override public DirectCompilerResult visit(FilterExpressionNode n) { DirectCompilerResult expr = n.getExpression().accept(this); DirectCompilerResult filter = n.getFilter().accept(this); Expressions.NamedLambda lambda = Expressions.namedLambda(filter.getExpression(), n.getFilter().getText()); DirectCompilerResult r = DirectCompilerResult.of( Expressions.filter(expr.getExpression(), lambda.name()), // here we could still try to infer the result type, but presently use ANY BuiltInType.UNKNOWN).withFD(expr).withFD(filter); r.addFieldDesclaration(lambda.field()); return r; }
r.addFieldDesclaration(nameLambda.field()); r.addFieldDesclaration(exprLambda.field()); r.withFD(iterName); r.withFD(iterExpr); rangeEndExpr.getText()); with.addArgument(rangeLambda.name()); r.addFieldDesclaration(rangeLambda.field()); r.withFD(rangeEnd);
private DirectCompilerResult createEmptyUnaryTestExpression() { LambdaExpr initializer = new LambdaExpr(); initializer.setEnclosingParameters(true); initializer.addParameter(new Parameter(new UnknownType(), "feelExprCtx")); initializer.addParameter(new Parameter(new UnknownType(), "left")); Statement lambdaBody = new ExpressionStmt(new BooleanLiteralExpr(true)); initializer.setBody(lambdaBody); String constantName = "UT_EMPTY"; VariableDeclarator vd = new VariableDeclarator(JavaParser.parseClassOrInterfaceType(UnaryTest.class.getCanonicalName()), constantName); vd.setInitializer(initializer); FieldDeclaration fd = new FieldDeclaration(); fd.setModifier(Modifier.PUBLIC, true); fd.setModifier(Modifier.STATIC, true); fd.setModifier(Modifier.FINAL, true); fd.addVariable(vd); fd.setJavadocComment(" FEEL unary test: - "); DirectCompilerResult directCompilerResult = DirectCompilerResult.of(new NameExpr(constantName), BuiltInType.UNARY_TEST); directCompilerResult.addFieldDesclaration(fd); return directCompilerResult; }
private DirectCompilerResult createRuntimeUnaryTestExpression(FEEL_1_1Parser.PositiveUnaryTestContext ctx, DirectCompilerResult endpoint) { String originalText = ParserHelper.getOriginalText(ctx); LambdaExpr initializer = new LambdaExpr(); initializer.setEnclosingParameters(true); initializer.addParameter(new Parameter(new UnknownType(), "feelExprCtx")); initializer.addParameter(new Parameter(new UnknownType(), "left")); Statement lambdaBody = null; MethodCallExpr expression = new MethodCallExpr(null, "gracefulEq"); expression.addArgument(new NameExpr("feelExprCtx")); expression.addArgument(endpoint.getExpression()); expression.addArgument(new NameExpr("left")); lambdaBody = new ExpressionStmt(expression); initializer.setBody(lambdaBody); String constantName = "UT_" + CodegenStringUtil.escapeIdentifier(originalText); VariableDeclarator vd = new VariableDeclarator(JavaParser.parseClassOrInterfaceType(UnaryTest.class.getCanonicalName()), constantName); vd.setInitializer(initializer); FieldDeclaration fd = new FieldDeclaration(); fd.setModifier(Modifier.PUBLIC, true); fd.setModifier(Modifier.STATIC, true); fd.setModifier(Modifier.FINAL, true); fd.addVariable(vd); fd.setJavadocComment(" FEEL unary test: " + originalText + " "); DirectCompilerResult directCompilerResult = DirectCompilerResult.of(new NameExpr(constantName), BuiltInType.UNARY_TEST, endpoint.getFieldDeclarations()); directCompilerResult.addFieldDesclaration(fd); return directCompilerResult; }
private DirectCompilerResult createListUnaryTestExpression(ParserRuleContext ctx, DirectCompilerResult endpoint) { String originalText = ParserHelper.getOriginalText(ctx); LambdaExpr initializer = new LambdaExpr(); initializer.setEnclosingParameters(true); initializer.addParameter(new Parameter(new UnknownType(), "feelExprCtx")); initializer.addParameter(new Parameter(new UnknownType(), "left")); Statement lambdaBody = null; MethodCallExpr expression = new MethodCallExpr( new EnclosedExpr(new CastExpr(TYPE_LIST, endpoint.getExpression())), "contains"); expression.addArgument(new NameExpr("left")); lambdaBody = new ExpressionStmt(expression); initializer.setBody(lambdaBody); String constantName = "UT_" + CodegenStringUtil.escapeIdentifier(originalText); VariableDeclarator vd = new VariableDeclarator(JavaParser.parseClassOrInterfaceType(UnaryTest.class.getCanonicalName()), constantName); vd.setInitializer(initializer); FieldDeclaration fd = new FieldDeclaration(); fd.setModifier(Modifier.PUBLIC, true); fd.setModifier(Modifier.STATIC, true); fd.setModifier(Modifier.FINAL, true); fd.addVariable(vd); fd.setJavadocComment(" FEEL unary test: " + originalText + " "); DirectCompilerResult directCompilerResult = DirectCompilerResult.of(new NameExpr(constantName), BuiltInType.UNARY_TEST, endpoint.getFieldDeclarations()); directCompilerResult.addFieldDesclaration(fd); return directCompilerResult; }
private DirectCompilerResult createWildcardUnaryTestExpression(ParserRuleContext ctx, DirectCompilerResult endpoint) { String originalText = ParserHelper.getOriginalText(ctx); LambdaExpr initializer = new LambdaExpr(); initializer.setEnclosingParameters(true); initializer.addParameter(new Parameter(new UnknownType(), "feelExprCtx")); initializer.addParameter(new Parameter(new UnknownType(), "left")); Statement lambdaBody = null; lambdaBody = new ExpressionStmt(new MethodCallExpr( null, "coerceToBoolean", new NodeList<>( new NameExpr("feelExprCtx"), endpoint.getExpression()))); initializer.setBody(lambdaBody); String constantName = "UT_" + CodegenStringUtil.escapeIdentifier(originalText); VariableDeclarator vd = new VariableDeclarator(JavaParser.parseClassOrInterfaceType(UnaryTest.class.getCanonicalName()), constantName); vd.setInitializer(initializer); FieldDeclaration fd = new FieldDeclaration(); fd.setModifier(Modifier.PUBLIC, true); fd.setModifier(Modifier.STATIC, true); fd.setModifier(Modifier.FINAL, true); fd.addVariable(vd); fd.setJavadocComment(" FEEL unary test: " + originalText + " "); DirectCompilerResult directCompilerResult = DirectCompilerResult.of(new NameExpr(constantName), BuiltInType.UNARY_TEST, endpoint.getFieldDeclarations()); directCompilerResult.addFieldDesclaration(fd); return directCompilerResult; }
public static DirectCompilerResult compiledErrorUnaryTest(String msg) { LambdaExpr initializer = new LambdaExpr(); initializer.setEnclosingParameters(true); initializer.addParameter(new Parameter(new UnknownType(), "feelExprCtx")); initializer.addParameter(new Parameter(new UnknownType(), "left")); Statement lambdaBody = new BlockStmt(new NodeList<>( new ExpressionStmt(compiledErrorExpression(msg)), new ReturnStmt(new BooleanLiteralExpr(false)) )); initializer.setBody(lambdaBody); String constantName = "UT_EMPTY"; VariableDeclarator vd = new VariableDeclarator(JavaParser.parseClassOrInterfaceType(UnaryTest.class.getCanonicalName()), constantName); vd.setInitializer(initializer); FieldDeclaration fd = new FieldDeclaration(); fd.setModifier(Modifier.PUBLIC, true); fd.setModifier(Modifier.STATIC, true); fd.setModifier(Modifier.FINAL, true); fd.addVariable(vd); fd.setJavadocComment(" FEEL unary test: - "); MethodCallExpr list = new MethodCallExpr(null, "list", new NodeList<>(new NameExpr(constantName))); DirectCompilerResult directCompilerResult = DirectCompilerResult.of(list, BuiltInType.LIST); directCompilerResult.addFieldDesclaration(fd); return directCompilerResult; }
directCompilerResult.addFieldDesclaration(fd); return directCompilerResult;