private UriResourcePartTyped parseLambdaRest(final TokenKind lastTokenKind, final UriResourcePartTyped lastResource) throws UriParserException, UriValidationException { ParserHelper.requireNext(tokenizer, TokenKind.OPEN); if (lastTokenKind == TokenKind.ANY && tokenizer.next(TokenKind.CLOSE)) { return new UriResourceLambdaAnyImpl(null, null); } ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); final String lambbdaVariable = tokenizer.getText(); ParserHelper.requireNext(tokenizer, TokenKind.COLON); lambdaVariables.addFirst(new UriResourceLambdaVarImpl(lambbdaVariable, lastResource == null ? referringType : lastResource.getType())); // The ABNF suggests that the "lambaPredicateExpr" must contain at least one lambdaVariable, // so arguably this could be checked in expression parsing or later in validation. final Expression lambdaPredicateExpr = parseExpression(); lambdaVariables.removeFirst(); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); if (lastTokenKind == TokenKind.ALL) { return new UriResourceLambdaAllImpl(lambbdaVariable, lambdaPredicateExpr); } else if (lastTokenKind == TokenKind.ANY) { return new UriResourceLambdaAnyImpl(lambbdaVariable, lambdaPredicateExpr); } else { throw new UriParserSyntaxException("Unexpected token.", UriParserSyntaxException.MessageKeys.SYNTAX); } }
private UriResourcePartTyped parseLambdaRest(final TokenKind lastTokenKind, final UriResourcePartTyped lastResource) throws UriParserException, UriValidationException { ParserHelper.requireNext(tokenizer, TokenKind.OPEN); if (lastTokenKind == TokenKind.ANY && tokenizer.next(TokenKind.CLOSE)) { return new UriResourceLambdaAnyImpl(null, null); } ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); final String lambbdaVariable = tokenizer.getText(); ParserHelper.requireNext(tokenizer, TokenKind.COLON); lambdaVariables.addFirst(new UriResourceLambdaVarImpl(lambbdaVariable, lastResource == null ? referringType : lastResource.getType())); // The ABNF suggests that the "lambaPredicateExpr" must contain at least one lambdaVariable, // so arguably this could be checked in expression parsing or later in validation. final Expression lambdaPredicateExpr = parseExpression(); lambdaVariables.removeFirst(); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); if (lastTokenKind == TokenKind.ALL) { return new UriResourceLambdaAllImpl(lambbdaVariable, lambdaPredicateExpr); } else if (lastTokenKind == TokenKind.ANY) { return new UriResourceLambdaAnyImpl(lambbdaVariable, lambdaPredicateExpr); } else { throw new UriParserSyntaxException("Unexpected token.", UriParserSyntaxException.MessageKeys.SYNTAX); } }