Search in sources :

Example 1 with Ternary

use of org.springframework.expression.spel.ast.Ternary in project spring-framework by spring-projects.

the class SpelCompilationCoverageTests method mixingItUp_propertyAccessIndexerOpLtTernaryRootNull.

@Test
public void mixingItUp_propertyAccessIndexerOpLtTernaryRootNull() throws Exception {
    Payload payload = new Payload();
    expression = parser.parseExpression("DR[0].three");
    Object v = expression.getValue(payload);
    assertEquals("Lorg/springframework/expression/spel/SpelCompilationCoverageTests$Three", getAst().getExitDescriptor());
    Expression expression = parser.parseExpression("DR[0].three.four lt 0.1d?#root:null");
    v = expression.getValue(payload);
    SpelExpression sExpr = (SpelExpression) expression;
    Ternary ternary = (Ternary) sExpr.getAST();
    OpLT oplt = (OpLT) ternary.getChild(0);
    CompoundExpression cExpr = (CompoundExpression) oplt.getLeftOperand();
    String cExprExitDescriptor = cExpr.getExitDescriptor();
    assertEquals("D", cExprExitDescriptor);
    assertEquals("Z", oplt.getExitDescriptor());
    assertCanCompile(expression);
    Object vc = expression.getValue(payload);
    assertEquals(payload, v);
    assertEquals(payload, vc);
    payload.DR[0].three.four = 0.13d;
    vc = expression.getValue(payload);
    assertNull(vc);
}
Also used : SpelExpression(org.springframework.expression.spel.standard.SpelExpression) Expression(org.springframework.expression.Expression) CompoundExpression(org.springframework.expression.spel.ast.CompoundExpression) Ternary(org.springframework.expression.spel.ast.Ternary) SpelExpression(org.springframework.expression.spel.standard.SpelExpression) CompoundExpression(org.springframework.expression.spel.ast.CompoundExpression) OpLT(org.springframework.expression.spel.ast.OpLT) Test(org.junit.Test)

Example 2 with Ternary

use of org.springframework.expression.spel.ast.Ternary in project spring-framework by spring-projects.

the class InternalSpelExpressionParser method eatExpression.

//	expression
//    : logicalOrExpression
//      ( (ASSIGN^ logicalOrExpression)
//	    | (DEFAULT^ logicalOrExpression)
//	    | (QMARK^ expression COLON! expression)
//      | (ELVIS^ expression))?;
private SpelNodeImpl eatExpression() {
    SpelNodeImpl expr = eatLogicalOrExpression();
    if (moreTokens()) {
        Token t = peekToken();
        if (t.kind == TokenKind.ASSIGN) {
            // a=b
            if (expr == null) {
                expr = new NullLiteral(toPos(t.startPos - 1, t.endPos - 1));
            }
            nextToken();
            SpelNodeImpl assignedValue = eatLogicalOrExpression();
            return new Assign(toPos(t), expr, assignedValue);
        }
        if (t.kind == TokenKind.ELVIS) {
            // a?:b (a if it isn't null, otherwise b)
            if (expr == null) {
                expr = new NullLiteral(toPos(t.startPos - 1, t.endPos - 2));
            }
            // elvis has left the building
            nextToken();
            SpelNodeImpl valueIfNull = eatExpression();
            if (valueIfNull == null) {
                valueIfNull = new NullLiteral(toPos(t.startPos + 1, t.endPos + 1));
            }
            return new Elvis(toPos(t), expr, valueIfNull);
        }
        if (t.kind == TokenKind.QMARK) {
            // a?b:c
            if (expr == null) {
                expr = new NullLiteral(toPos(t.startPos - 1, t.endPos - 1));
            }
            nextToken();
            SpelNodeImpl ifTrueExprValue = eatExpression();
            eatToken(TokenKind.COLON);
            SpelNodeImpl ifFalseExprValue = eatExpression();
            return new Ternary(toPos(t), expr, ifTrueExprValue, ifFalseExprValue);
        }
    }
    return expr;
}
Also used : SpelNodeImpl(org.springframework.expression.spel.ast.SpelNodeImpl) Ternary(org.springframework.expression.spel.ast.Ternary) Elvis(org.springframework.expression.spel.ast.Elvis) Assign(org.springframework.expression.spel.ast.Assign) NullLiteral(org.springframework.expression.spel.ast.NullLiteral)

Aggregations

Ternary (org.springframework.expression.spel.ast.Ternary)2 Test (org.junit.Test)1 Expression (org.springframework.expression.Expression)1 Assign (org.springframework.expression.spel.ast.Assign)1 CompoundExpression (org.springframework.expression.spel.ast.CompoundExpression)1 Elvis (org.springframework.expression.spel.ast.Elvis)1 NullLiteral (org.springframework.expression.spel.ast.NullLiteral)1 OpLT (org.springframework.expression.spel.ast.OpLT)1 SpelNodeImpl (org.springframework.expression.spel.ast.SpelNodeImpl)1 SpelExpression (org.springframework.expression.spel.standard.SpelExpression)1