From 4b3d706cb5972a728d5d67ae3c069dd6d1d8302e Mon Sep 17 00:00:00 2001 From: Edoardo Vacchi Date: Wed, 13 Jun 2018 16:21:31 +0200 Subject: [PATCH] DROOLS-1701 fix some `in` test cases (#6) --- .../codegen/feel11/DirectCompilerVisitor.java | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/codegen/feel11/DirectCompilerVisitor.java b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/codegen/feel11/DirectCompilerVisitor.java index b18bdd4da0b..2155f366d41 100644 --- a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/codegen/feel11/DirectCompilerVisitor.java +++ b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/codegen/feel11/DirectCompilerVisitor.java @@ -60,6 +60,7 @@ import org.drools.javaparser.ast.type.UnknownType; import org.kie.dmn.feel.lang.CompositeType; import org.kie.dmn.feel.lang.Type; +import org.kie.dmn.feel.lang.ast.BaseNode; import org.kie.dmn.feel.lang.ast.InfixOpNode.InfixOperator; import org.kie.dmn.feel.lang.ast.RangeNode; import org.kie.dmn.feel.lang.ast.RangeNode.IntervalBoundary; @@ -477,10 +478,21 @@ public DirectCompilerResult visitExpressionList(FEEL_1_1Parser.ExpressionListCon return DirectCompilerResult.of(list, BuiltInType.LIST, DirectCompilerResult.mergeFDs(exprs.toArray(new DirectCompilerResult[]{}))); } -// @Override -// public DirectCompilerResult visitRelExpressionValueList(FEEL_1_1Parser.RelExpressionValueListContext ctx) { -// throw new UnsupportedOperationException("TODO"); // TODO -// } + @Override + public DirectCompilerResult visitRelExpressionValueList(FEEL_1_1Parser.RelExpressionValueListContext ctx) { + DirectCompilerResult value = visit(ctx.val); + DirectCompilerResult list = visit(ctx.expressionList()); + + MethodCallExpr expression = new MethodCallExpr( + list.getExpression(), + "contains", + new NodeList<>(value.getExpression())); + + return DirectCompilerResult.of( + expression, + BuiltInType.UNARY_TEST, + mergeFDs(value, list)); + } @Override public DirectCompilerResult visitInterval(FEEL_1_1Parser.IntervalContext ctx) { @@ -682,11 +694,30 @@ private DirectCompilerResult createUnaryTestExpression(ParserRuleContext ctx, Di // public DirectCompilerResult visitRelExpressionTestList(FEEL_1_1Parser.RelExpressionTestListContext ctx) { // throw new UnsupportedOperationException("TODO"); // TODO // } -// -// @Override -// public DirectCompilerResult visitRelExpressionValue(RelExpressionValueContext ctx) { -// throw new UnsupportedOperationException("TODO"); // TODO -// } + + @Override + public DirectCompilerResult visitRelExpressionValue(FEEL_1_1Parser.RelExpressionValueContext ctx) { + DirectCompilerResult value = visit(ctx.val); + DirectCompilerResult expr = visit(ctx.expression()); + + MethodCallExpr expression; + if (expr.resultType.equals(BuiltInType.LIST)) { + expression = new MethodCallExpr( + expr.getExpression(), + "contains", + new NodeList<>(value.getExpression())); + } else { + expression = new MethodCallExpr( + expr.getExpression(), + "equals", + new NodeList<>(value.getExpression())); + } + + return DirectCompilerResult.of( + expression, + BuiltInType.UNARY_TEST, + mergeFDs(value, expr)); + } @Override public DirectCompilerResult visitPositiveUnaryTestNull(FEEL_1_1Parser.PositiveUnaryTestNullContext ctx) {