Package org.springframework.expression.spel.ast

Examples of org.springframework.expression.spel.ast.SpelNodeImpl


      tokenizer.process();
      tokenStream = tokenizer.getTokens();
      tokenStreamLength = tokenStream.size();
      tokenStreamPointer = 0;
      constructedNodes.clear();
      SpelNodeImpl ast = eatExpression();
      if (moreTokens()) {
        throw new SpelParseException(peekToken().startpos,SpelMessage.MORE_INPUT,toString(nextToken()));
      }
      Assert.isTrue(constructedNodes.isEmpty());
      return new SpelExpression(expressionString, ast, configuration)
View Full Code Here


  //      ( (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);
      } else 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));
        }
        nextToken(); // elvis has left the building
        SpelNodeImpl valueIfNull = eatExpression();
        if (valueIfNull==null) {
          valueIfNull = new NullLiteral(toPos(t.startpos+1,t.endpos+1));
        }
        return new Elvis(toPos(t),expr,valueIfNull);
      } else 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;
  }
View Full Code Here

    return expr;
  }
                         
  //logicalOrExpression : logicalAndExpression (OR^ logicalAndExpression)*;
  private SpelNodeImpl eatLogicalOrExpression() {
    SpelNodeImpl expr = eatLogicalAndExpression();
    while (peekIdentifierToken("or")) {
      Token t = nextToken(); //consume OR
      SpelNodeImpl rhExpr = eatLogicalAndExpression();
      checkRightOperand(t,rhExpr);
      expr = new OpOr(toPos(t),expr,rhExpr);
    }
    return expr;
  }
View Full Code Here

    return expr;
  }

  // logicalAndExpression : relationalExpression (AND^ relationalExpression)*;
  private SpelNodeImpl eatLogicalAndExpression() {
    SpelNodeImpl expr = eatRelationalExpression();
    while (peekIdentifierToken("and")) {
      Token t = nextToken();// consume 'AND'
      SpelNodeImpl rhExpr = eatRelationalExpression();
      checkRightOperand(t,rhExpr);
      expr = new OpAnd(toPos(t),expr,rhExpr);
    }
    return expr;
  }
View Full Code Here

    return expr;
  }
 
  // relationalExpression : sumExpression (relationalOperator^ sumExpression)?;
  private SpelNodeImpl eatRelationalExpression() {
    SpelNodeImpl expr = eatSumExpression();
    Token relationalOperatorToken = maybeEatRelationalOperator();
    if (relationalOperatorToken != null) {
      Token t = nextToken(); //consume relational operator token
      SpelNodeImpl rhExpr = eatSumExpression();
      checkRightOperand(t,rhExpr);
      TokenKind tk = relationalOperatorToken.kind;
      if (relationalOperatorToken.isNumericRelationalOperator()) {
        int pos = toPos(t);
        if (tk==TokenKind.GT) {
View Full Code Here

    return expr;
  }
 
  //sumExpression: productExpression ( (PLUS^ | MINUS^) productExpression)*;
  private SpelNodeImpl eatSumExpression() {
    SpelNodeImpl expr = eatProductExpression();   
    while (peekToken(TokenKind.PLUS,TokenKind.MINUS)) {
      Token t = nextToken();//consume PLUS or MINUS
      SpelNodeImpl rhExpr = eatProductExpression();
      checkRightOperand(t,rhExpr);
      if (t.kind==TokenKind.PLUS) {
        expr = new OpPlus(toPos(t),expr,rhExpr);
      } else {
        Assert.isTrue(t.kind==TokenKind.MINUS);
View Full Code Here

    return expr;
  }
 
  // productExpression: powerExpr ((STAR^ | DIV^| MOD^) powerExpr)* ;
  private SpelNodeImpl eatProductExpression() {
    SpelNodeImpl expr = eatPowerExpression();
    while (peekToken(TokenKind.STAR,TokenKind.DIV,TokenKind.MOD)) {
      Token t = nextToken(); // consume STAR/DIV/MOD
      SpelNodeImpl rhExpr = eatPowerExpression();
      checkRightOperand(t,rhExpr);
      if (t.kind==TokenKind.STAR) {
        expr = new OpMultiply(toPos(t),expr,rhExpr);
      } else if (t.kind==TokenKind.DIV) {
        expr = new OpDivide(toPos(t),expr,rhExpr);
View Full Code Here

    return expr;
  }
 
  // powerExpr  : unaryExpression (POWER^ unaryExpression)? ;
  private SpelNodeImpl eatPowerExpression() {
    SpelNodeImpl expr = eatUnaryExpression();
    if (peekToken(TokenKind.POWER)) {
      Token t = nextToken();//consume POWER
      SpelNodeImpl rhExpr = eatUnaryExpression();
      checkRightOperand(t,rhExpr);
      return new OperatorPower(toPos(t),expr, rhExpr);
    }
    return expr;
  }
View Full Code Here

  // unaryExpression: (PLUS^ | MINUS^ | BANG^) unaryExpression | primaryExpression ;
  private SpelNodeImpl eatUnaryExpression() {
    if (peekToken(TokenKind.PLUS,TokenKind.MINUS,TokenKind.NOT)) {
      Token t = nextToken();
      SpelNodeImpl expr = eatUnaryExpression();
      if (t.kind==TokenKind.NOT) {
        return new OperatorNot(toPos(t),expr);
      } else if (t.kind==TokenKind.PLUS) {
        return new OpPlus(toPos(t),expr);
      } else {
View Full Code Here

  }
 
  // primaryExpression : startNode (node)? -> ^(EXPRESSION startNode (node)?);
  private SpelNodeImpl eatPrimaryExpression() {
    List<SpelNodeImpl> nodes = new ArrayList<SpelNodeImpl>();
    SpelNodeImpl start = eatStartNode(); // always a start node
    nodes.add(start);
    while (maybeEatNode()) {
      nodes.add(pop());
    }
    if (nodes.size()==1) {
      return nodes.get(0);
    } else {
      return new CompoundExpression(toPos(start.getStartPosition(),nodes.get(nodes.size()-1).getEndPosition()),nodes.toArray(new SpelNodeImpl[nodes.size()]));
    }
  }
View Full Code Here

TOP

Related Classes of org.springframework.expression.spel.ast.SpelNodeImpl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.