Search in sources :

Example 1 with InlineList

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

the class InternalSpelExpressionParser method maybeEatInlineListOrMap.

// list = LCURLY (element (COMMA element)*) RCURLY
// map  = LCURLY (key ':' value (COMMA key ':' value)*) RCURLY
private boolean maybeEatInlineListOrMap() {
    Token t = peekToken();
    if (!peekToken(TokenKind.LCURLY, true)) {
        return false;
    }
    SpelNodeImpl expr = null;
    Token closingCurly = peekToken();
    if (peekToken(TokenKind.RCURLY, true)) {
        // empty list '{}'
        expr = new InlineList(toPos(t.startPos, closingCurly.endPos));
    } else if (peekToken(TokenKind.COLON, true)) {
        closingCurly = eatToken(TokenKind.RCURLY);
        // empty map '{:}'
        expr = new InlineMap(toPos(t.startPos, closingCurly.endPos));
    } else {
        SpelNodeImpl firstExpression = eatExpression();
        // ':' - this is a map!
        if (peekToken(TokenKind.RCURLY)) {
            // list with one item in it
            List<SpelNodeImpl> listElements = new ArrayList<>();
            listElements.add(firstExpression);
            closingCurly = eatToken(TokenKind.RCURLY);
            expr = new InlineList(toPos(t.startPos, closingCurly.endPos), listElements.toArray(new SpelNodeImpl[listElements.size()]));
        } else if (peekToken(TokenKind.COMMA, true)) {
            // multi-item list
            List<SpelNodeImpl> listElements = new ArrayList<>();
            listElements.add(firstExpression);
            do {
                listElements.add(eatExpression());
            } while (peekToken(TokenKind.COMMA, true));
            closingCurly = eatToken(TokenKind.RCURLY);
            expr = new InlineList(toPos(t.startPos, closingCurly.endPos), listElements.toArray(new SpelNodeImpl[listElements.size()]));
        } else if (peekToken(TokenKind.COLON, true)) {
            // map!
            List<SpelNodeImpl> mapElements = new ArrayList<>();
            mapElements.add(firstExpression);
            mapElements.add(eatExpression());
            while (peekToken(TokenKind.COMMA, true)) {
                mapElements.add(eatExpression());
                eatToken(TokenKind.COLON);
                mapElements.add(eatExpression());
            }
            closingCurly = eatToken(TokenKind.RCURLY);
            expr = new InlineMap(toPos(t.startPos, closingCurly.endPos), mapElements.toArray(new SpelNodeImpl[mapElements.size()]));
        } else {
            raiseInternalException(t.startPos, SpelMessage.OOD);
        }
    }
    this.constructedNodes.push(expr);
    return true;
}
Also used : SpelNodeImpl(org.springframework.expression.spel.ast.SpelNodeImpl) ArrayList(java.util.ArrayList) InlineList(org.springframework.expression.spel.ast.InlineList) List(java.util.List) InlineList(org.springframework.expression.spel.ast.InlineList) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) InlineMap(org.springframework.expression.spel.ast.InlineMap)

Example 2 with InlineList

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

the class ListTests method checkConstantList.

private void checkConstantList(String expressionText, boolean expectedToBeConstant) {
    SpelExpressionParser parser = new SpelExpressionParser();
    SpelExpression expression = (SpelExpression) parser.parseExpression(expressionText);
    SpelNode node = expression.getAST();
    assertTrue(node instanceof InlineList);
    InlineList inlineList = (InlineList) node;
    if (expectedToBeConstant) {
        assertTrue(inlineList.isConstant());
    } else {
        assertFalse(inlineList.isConstant());
    }
}
Also used : SpelExpressionParser(org.springframework.expression.spel.standard.SpelExpressionParser) SpelExpression(org.springframework.expression.spel.standard.SpelExpression) InlineList(org.springframework.expression.spel.ast.InlineList)

Aggregations

InlineList (org.springframework.expression.spel.ast.InlineList)2 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 InlineMap (org.springframework.expression.spel.ast.InlineMap)1 SpelNodeImpl (org.springframework.expression.spel.ast.SpelNodeImpl)1 SpelExpression (org.springframework.expression.spel.standard.SpelExpression)1 SpelExpressionParser (org.springframework.expression.spel.standard.SpelExpressionParser)1