提交 4d437688 编写于 作者: A Andy Clement

Removing functionality. Removed soundslike/distanceto/like operators

上级 59a44275
...@@ -19,7 +19,6 @@ would have taken? At the moment ternary expressions are just considered NOT wri ...@@ -19,7 +19,6 @@ would have taken? At the moment ternary expressions are just considered NOT wri
Syntax Syntax
- are distanceto or soundslike any use?
- should the 'is' operator change to 'instanceof' ? - should the 'is' operator change to 'instanceof' ?
- in this expression we hit the problem of not being able to write chars, since '' always means string: - in this expression we hit the problem of not being able to write chars, since '' always means string:
evaluate("new java.lang.String('hello').charAt(2).equals('l'.charAt(0))", true, Boolean.class); evaluate("new java.lang.String('hello').charAt(2).equals('l'.charAt(0))", true, Boolean.class);
......
/*
* Copyright 2004-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.expression.spel.ast;
import org.antlr.runtime.Token;
import org.springframework.expression.EvaluationException;
import org.springframework.expression.spel.ExpressionState;
import org.springframework.expression.spel.SpelException;
/**
* The distanceto operator uses an implementation of the levenshtein distance measurement for determining the 'edit
* distance' between two strings (the two operands to distanceto). http://en.wikipedia.org/wiki/Levenshtein_distance
*
* @author Andy Clement
*/
public class OperatorDistanceTo extends Operator {
private final static boolean DEBUG = false;
public OperatorDistanceTo(Token payload) {
super(payload);
}
@Override
public String getOperatorName() {
return "distanceto";
}
@Override
public Object getValue(ExpressionState state) throws EvaluationException {
try {
Object left = getLeftOperand().getValue(state);
Object right = getRightOperand().getValue(state);
return computeDistanceTo((String) left, (String) right);
} catch (SpelException ee) {
throw ee;
}
}
private int computeDistanceTo(String from, String to) {
if (from.equals(to))
return 0;
int[][] d = new int[from.length() + 1][to.length() + 1];
for (int i = 0; i <= from.length(); i++)
d[i][0] = i;
for (int j = 0; j <= to.length(); j++)
d[0][j] = j;
for (int i = 1; i <= from.length(); i++) {
for (int j = 1; j <= to.length(); j++) {
int cost;
if (from.charAt(i - 1) == to.charAt(j - 1))
cost = 0;
else
cost = 1;
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);// del,ins,subst
}
}
if (DEBUG) {
// Display the table of values
System.out.print(" ");
for (int j = 0; j < from.length(); j++) {
System.out.print(from.charAt(j) + " ");
}
System.out.println();
for (int j = 0; j < to.length() + 1; j++) {
System.out.print((j > 0 ? to.charAt(j - 1) : " ") + " ");
for (int i = 0; i < from.length() + 1; i++) {
System.out.print(d[i][j]);
if (i == from.length() && j == to.length())
System.out.print("<");
else if (i == from.length() - 1 && j == to.length())
System.out.print(">");
else
System.out.print(" ");
}
System.out.println();
}
}
return d[from.length()][to.length()];
}
private int min(int i, int j, int k) {
int min = i;
if (j < min)
min = j;
if (k < min)
min = k;
return min;
}
}
/*
* Copyright 2004-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.expression.spel.ast;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.antlr.runtime.Token;
import org.springframework.expression.EvaluationException;
import org.springframework.expression.spel.ExpressionState;
import org.springframework.expression.spel.SpelException;
import org.springframework.expression.spel.SpelMessages;
/**
* Implements the like operator. The like operator behaves the same as the SQL LIKE operator. The first operand is
* compared against the expression supplied as the second operand. This expression supports two wildcards: % meaning any
* string of any length, and _ meaning any single character.
*
* @author Andy Clement
*/
public class OperatorLike extends Operator {
public OperatorLike(Token payload) {
super(payload);
}
@Override
public String getOperatorName() {
return "like";
}
@Override
public Boolean getValue(ExpressionState state) throws EvaluationException {
SpelNode leftOp = getLeftOperand();
SpelNode rightOp = getRightOperand();
Object left = leftOp.getValue(state, String.class);
Object right = getRightOperand().getValue(state);
try {
if (!(left instanceof String)) {
throw new SpelException(leftOp.getCharPositionInLine(),
SpelMessages.INVALID_FIRST_OPERAND_FOR_LIKE_OPERATOR, left);
}
if (!(right instanceof String)) {
throw new SpelException(rightOp.getCharPositionInLine(),
SpelMessages.INVALID_SECOND_OPERAND_FOR_LIKE_OPERATOR, right);
}
// Translate that pattern to a java regex
// not really the best option, what if the right operand already had regex related chars in it?
String likePattern = (String) right;
likePattern = likePattern.replace('_', '.');
likePattern = likePattern.replaceAll("%", ".*");
Pattern pattern = Pattern.compile(likePattern);
Matcher matcher = pattern.matcher((String) left);
return matcher.matches();
} catch (PatternSyntaxException pse) {
throw new SpelException(rightOp.getCharPositionInLine(), pse, SpelMessages.INVALID_PATTERN, right);
}
}
}
/*
* Copyright 2004-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.expression.spel.ast;
import org.antlr.runtime.Token;
import org.springframework.expression.EvaluationException;
import org.springframework.expression.spel.ExpressionState;
import org.springframework.expression.spel.SpelException;
import org.springframework.expression.spel.SpelMessages;
public class OperatorSoundsLike extends Operator {
public OperatorSoundsLike(Token payload) {
super(payload);
}
@Override
public Object getValue(ExpressionState state) throws EvaluationException {
Object left = getLeftOperand().getValue(state);
Object right = getRightOperand().getValue(state);
if (!(left instanceof String)) {
throw new SpelException(getCharPositionInLine(), SpelMessages.SOUNDSLIKE_NEEDS_STRING_OPERAND, left
.getClass().getName());
}
if (!(right instanceof String)) {
throw new SpelException(getCharPositionInLine(), SpelMessages.SOUNDSLIKE_NEEDS_STRING_OPERAND, right
.getClass().getName());
}
String leftSoundex = computeSoundex((String) left);
String rightSoundex = computeSoundex((String) right);
return state.getTypeComparator().compare(leftSoundex, rightSoundex) == 0;
}
// TODO if we keep soundslike, improve upon this basic implementation
private String computeSoundex(String input) {
if (input == null || input.length() == 0)
return "0000";
input = input.toUpperCase();
StringBuilder soundex = new StringBuilder();
soundex.append(input.charAt(0));
for (int i = 1; i < input.length(); i++) {
char ch = input.charAt(i);
if ("HW".indexOf(ch) != -1)
continue; // remove HWs now
if ("BFPV".indexOf(ch) != -1) {
soundex.append("1");
} else if ("CGJKQSXZ".indexOf(ch) != -1) {
soundex.append("2");
} else if ("DT".indexOf(ch) != -1) {
soundex.append("3");
} else if ("L".indexOf(ch) != -1) {
soundex.append("4");
} else if ("MN".indexOf(ch) != -1) {
soundex.append("5");
} else if ("R".indexOf(ch) != -1) {
soundex.append("6");
} else {
soundex.append(ch);
}
}
StringBuilder shorterSoundex = new StringBuilder();
shorterSoundex.append(soundex.charAt(0));
for (int i = 1; i < soundex.length(); i++) {
if ((i + 1) < soundex.length() && soundex.charAt(i) == soundex.charAt(i + 1))
continue;
if ("AEIOUY".indexOf(soundex.charAt(i)) != -1)
continue;
shorterSoundex.append(soundex.charAt(i));
}
shorterSoundex.append("0000");
return shorterSoundex.substring(0, 4);
}
// wikipedia:
// The Soundex code for a name consists of a letter followed by three numbers: the letter is the first letter of the
// name, and the numbers encode the remaining consonants. Similar sounding consonants share the same number so, for
// example, the labial B, F, P and V are all encoded as 1. Vowels can affect the coding, but are never coded
// directly unless they appear at the start of the name.
// The exact algorithm is as follows:
// Retain the first letter of the string
// Remove all occurrences of the following letters, unless it is the first letter: a, e, h, i, o, u, w, y
// Assign numbers to the remaining letters (after the first) as follows:
// b, f, p, v = 1
// c, g, j, k, q, s, x, z = 2
// d, t = 3
// l = 4
// m, n = 5
// r = 6
// If two or more letters with the same number were adjacent in the original name (before step 1), or adjacent
// except for any intervening h and w (American census only), then omit all but the first.
// Return the first four characters, right-padding with zeroes if there are fewer than four.
// Using this algorithm, both "Robert" and "Rupert" return the same string "R163" while "Rubin" yields "R150".
@Override
public String getOperatorName() {
return "soundslike";
}
}
...@@ -86,17 +86,10 @@ relationalExpression : sumExpression (relationalOperator^ sumExpression)?; ...@@ -86,17 +86,10 @@ relationalExpression : sumExpression (relationalOperator^ sumExpression)?;
sumExpression sumExpression
: productExpression ( (PLUS^ | MINUS^) productExpression)*; : productExpression ( (PLUS^ | MINUS^) productExpression)*;
// : left=productExpression (PLUS right+=productExpression)+ -> ^(ADD $left $right)
// | left=productExpression (MINUS right+=productExpression)+ -> ^(SUBTRACT $left $right)
// | productExpression;
// TODO could really do with changing ast node types here // TODO could really do with changing ast node types here
productExpression productExpression
: powerExpr ((STAR^ | DIV^| MOD^) powerExpr)* ; : powerExpr ((STAR^ | DIV^| MOD^) powerExpr)* ;
// : left=powerExpr (STAR right+=powerExpr) -> ^(MULTIPLY $left $right)
// | left=powerExpr (DIV right+=powerExpr) -> ^(DIVIDE $left $right)
// | left=powerExpr (MOD right+=powerExpr) -> ^(MODULUS $left $right)
// | powerExpr;
powerExpr : unaryExpression (POWER^ unaryExpression)? ; powerExpr : unaryExpression (POWER^ unaryExpression)? ;
...@@ -126,7 +119,6 @@ startNode ...@@ -126,7 +119,6 @@ startNode
| listInitializer | listInitializer
| mapInitializer | mapInitializer
| lambda | lambda
// | attribute
; ;
node node
...@@ -288,10 +280,7 @@ relationalOperator ...@@ -288,10 +280,7 @@ relationalOperator
| IN | IN
| IS | IS
| BETWEEN | BETWEEN
| LIKE
| MATCHES | MATCHES
| SOUNDSLIKE
| DISTANCETO
; ;
ASSIGN: '='; ASSIGN: '=';
...@@ -301,14 +290,9 @@ LESS_THAN: '<'; ...@@ -301,14 +290,9 @@ LESS_THAN: '<';
LESS_THAN_OR_EQUAL: '<='; LESS_THAN_OR_EQUAL: '<=';
GREATER_THAN: '>'; GREATER_THAN: '>';
GREATER_THAN_OR_EQUAL: '>='; GREATER_THAN_OR_EQUAL: '>=';
SOUNDSLIKE
: 'soundslike';
DISTANCETO
: 'distanceto';
IN: 'in'; IN: 'in';
IS: 'is'; IS: 'is';
BETWEEN:'between'; BETWEEN:'between';
LIKE: 'like';
MATCHES:'matches'; MATCHES:'matches';
NULL_LITERAL: 'null'; NULL_LITERAL: 'null';
......
COMMA=51
GREATER_THAN_OR_EQUAL=79 GREATER_THAN_OR_EQUAL=79
EXPRESSIONLIST=4 SELECT_FIRST=58
COMMA=51
HOLDER=14
GREATER_THAN=78 GREATER_THAN=78
TYPE=60
EXPRESSIONLIST=4
MINUS=41 MINUS=41
MAP_ENTRY=25
SELECT_LAST=59
NUMBER=29 NUMBER=29
ARGLIST=11
BANG=46
LESS_THAN=76 LESS_THAN=76
METHOD=26 BANG=46
ARGLIST=11
FALSE=70 FALSE=70
METHOD=26
PROPERTY_OR_FIELD=9 PROPERTY_OR_FIELD=9
LBRACKET=53
MOD=44
INDEXER=10 INDEXER=10
CONSTRUCTOR_ARRAY=15 CONSTRUCTOR_ARRAY=15
FUNCTIONREF=17
NULL_LITERAL=66 NULL_LITERAL=66
NAMED_ARGUMENT=16 NAMED_ARGUMENT=16
OR=38
PIPE=62 PIPE=62
DOT=47 DOT=47
AND=39 RCURLY=56
EXPRESSION=6 EXPRESSION=6
AND=39
LCURLY=63 LCURLY=63
DATE_LITERAL=13 DATE_LITERAL=13
REAL_TYPE_SUFFIX=92 REAL_TYPE_SUFFIX=89
QUALIFIED_IDENTIFIER=7
SELECT=57
STRING_LITERAL=64 STRING_LITERAL=64
SUBTRACT=28 SELECT=57
QUALIFIED_IDENTIFIER=7
RBRACKET=54 RBRACKET=54
RPAREN=33 SUBTRACT=28
BETWEEN=82
SIGN=93
PLUS=40
INTEGER_LITERAL=5
AT=52
RANGE=19
SOUNDSLIKE=85
WS=89
DOLLAR=50
LESS_THAN_OR_EQUAL=77
HEXADECIMAL_INTEGER_LITERAL=67
LAMBDA=61
SEMI=31
EQUAL=74
DOT_ESCAPED=88
QMARK=36
COLON=37
PROJECT=55
DIV=43
REAL_LITERAL=68
ADD=27
TRUE=69
EXPONENT_PART=91
POUND=48
HOLDER=14
SELECT_FIRST=58
TYPE=60
MAP_ENTRY=25
SELECT_LAST=59
LBRACKET=53
MOD=44
FUNCTIONREF=17
OR=38
RCURLY=56
ASSIGN=34 ASSIGN=34
BETWEEN=82
RPAREN=33
SIGN=90
LPAREN=30 LPAREN=30
HEX_DIGIT=73 HEX_DIGIT=73
PLUS=40
LIST_INITIALIZER=21 LIST_INITIALIZER=21
APOS=87 APOS=84
INTEGER_LITERAL=5
AT=52
ID=49 ID=49
NOT_EQUAL=75 NOT_EQUAL=75
RANGE=19
POWER=45 POWER=45
TYPEREF=18 TYPEREF=18
DISTANCETO=86
DECIMAL_DIGIT=71 DECIMAL_DIGIT=71
WS=86
IS=81 IS=81
DOLLAR=50
LESS_THAN_OR_EQUAL=77
SEMIRPAREN=32 SEMIRPAREN=32
DQ_STRING_LITERAL=65 DQ_STRING_LITERAL=65
LIKE=83 HEXADECIMAL_INTEGER_LITERAL=67
MAP_INITIALIZER=22 MAP_INITIALIZER=22
LAMBDA=61
LOCALFUNC=24 LOCALFUNC=24
IN=80 IN=80
CONSTRUCTOR=12 CONSTRUCTOR=12
SEMI=31
INTEGER_TYPE_SUFFIX=72 INTEGER_TYPE_SUFFIX=72
MATCHES=84 EQUAL=74
UPTO=90 MATCHES=83
DOT_ESCAPED=85
UPTO=87
QMARK=36
REFERENCE=8 REFERENCE=8
PROJECT=55
DEFAULT=35 DEFAULT=35
COLON=37
DIV=43
LOCALVAR=23 LOCALVAR=23
STAR=42 STAR=42
REAL_LITERAL=68
VARIABLEREF=20 VARIABLEREF=20
'date'=95 EXPONENT_PART=88
'new'=94 TRUE=69
ADD=27
POUND=48
'date'=92
'new'=91
...@@ -5,8 +5,8 @@ options { ...@@ -5,8 +5,8 @@ options {
} }
@header {package org.springframework.expression.spel.generated;} @header {package org.springframework.expression.spel.generated;}
T94 : 'new' ; T91 : 'new' ;
T95 : 'date' ; T92 : 'date' ;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 67 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 67
SEMIRPAREN : ';)'; // recoveryrelated: allows us to cope with a rogue superfluous semicolon before the rparen in an expression list SEMIRPAREN : ';)'; // recoveryrelated: allows us to cope with a rogue superfluous semicolon before the rparen in an expression list
...@@ -18,120 +18,112 @@ INTEGER_LITERAL ...@@ -18,120 +18,112 @@ INTEGER_LITERAL
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 279 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 279
HEXADECIMAL_INTEGER_LITERAL : ('0x' | '0X') (HEX_DIGIT)+ (INTEGER_TYPE_SUFFIX)?; HEXADECIMAL_INTEGER_LITERAL : ('0x' | '0X') (HEX_DIGIT)+ (INTEGER_TYPE_SUFFIX)?;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 297 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 294
ASSIGN: '='; ASSIGN: '=';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 298 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 295
EQUAL: '=='; EQUAL: '==';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 299 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 296
NOT_EQUAL: '!='; NOT_EQUAL: '!=';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 300 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 297
LESS_THAN: '<'; LESS_THAN: '<';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 301 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 298
LESS_THAN_OR_EQUAL: '<='; LESS_THAN_OR_EQUAL: '<=';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 302 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 299
GREATER_THAN: '>'; GREATER_THAN: '>';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 303 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 300
GREATER_THAN_OR_EQUAL: '>='; GREATER_THAN_OR_EQUAL: '>=';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 304 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 301
SOUNDSLIKE
: 'soundslike';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 306
DISTANCETO
: 'distanceto';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 308
IN: 'in'; IN: 'in';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 309 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 302
IS: 'is'; IS: 'is';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 310 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 303
BETWEEN:'between'; BETWEEN:'between';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 311 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 304
LIKE: 'like';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 312
MATCHES:'matches'; MATCHES:'matches';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 313 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 305
NULL_LITERAL: 'null'; NULL_LITERAL: 'null';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 315 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 307
SEMI: ';'; SEMI: ';';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 316 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 308
DOT: '.'; DOT: '.';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 317 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 309
COMMA: ','; COMMA: ',';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 318 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 310
LPAREN: '('; LPAREN: '(';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 319 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 311
RPAREN: ')'; RPAREN: ')';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 320 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 312
LCURLY: '{'; LCURLY: '{';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 321 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 313
RCURLY: '}'; RCURLY: '}';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 322 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 314
LBRACKET: '['; LBRACKET: '[';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 323 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 315
RBRACKET: ']'; RBRACKET: ']';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 324 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 316
PIPE: '|'; PIPE: '|';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 326 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 318
AND: 'and'; AND: 'and';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 327 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 319
OR: 'or'; OR: 'or';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 328 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 320
FALSE: 'false'; FALSE: 'false';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 329 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 321
TRUE: 'true'; TRUE: 'true';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 331 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 323
PLUS: '+'; PLUS: '+';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 332 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 324
MINUS: '-'; MINUS: '-';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 333 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 325
DIV: '/'; DIV: '/';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 334 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 326
STAR: '*'; STAR: '*';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 335 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 327
MOD: '%'; MOD: '%';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 336 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 328
POWER: '^'; POWER: '^';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 337 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 329
BANG: '!'; BANG: '!';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 338 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 330
POUND: '#'; POUND: '#';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 339 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 331
QMARK: '?'; QMARK: '?';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 340 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 332
DEFAULT: '??'; DEFAULT: '??';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 341 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 333
LAMBDA: '{|'; LAMBDA: '{|';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 342 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 334
PROJECT: '!{'; PROJECT: '!{';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 343 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 335
SELECT: '?{'; SELECT: '?{';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 344 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 336
SELECT_FIRST: '^{'; SELECT_FIRST: '^{';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 345 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 337
SELECT_LAST: '${'; SELECT_LAST: '${';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 346 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 338
TYPE: 'T('; TYPE: 'T(';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 348 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 340
STRING_LITERAL: '\''! (APOS|~'\'')* '\''!; STRING_LITERAL: '\''! (APOS|~'\'')* '\''!;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 349 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 341
DQ_STRING_LITERAL: '"'! (~'"')* '"'!; DQ_STRING_LITERAL: '"'! (~'"')* '"'!;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 350 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 342
ID: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|DOT_ESCAPED)*; ID: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|DOT_ESCAPED)*;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 351 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 343
DOT_ESCAPED: '\\.'; DOT_ESCAPED: '\\.';
//DOUBLE_DOT: ':'; //DOUBLE_DOT: ':';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 353 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 345
WS: ( ' ' | '\t' | '\n' |'\r')+ { $channel=HIDDEN; } ; WS: ( ' ' | '\t' | '\n' |'\r')+ { $channel=HIDDEN; } ;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 354 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 346
DOLLAR: '$'; DOLLAR: '$';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 355 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 347
AT: '@'; AT: '@';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 356 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 348
UPTO: '..'; UPTO: '..';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 357 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 349
COLON: ':'; COLON: ':';
/* /*
...@@ -149,26 +141,26 @@ COLON: ':'; ...@@ -149,26 +141,26 @@ COLON: ':';
in= (DECIMAL_DIGIT)+ (REAL_TYPE_SUFFIX) in= (DECIMAL_DIGIT)+ (REAL_TYPE_SUFFIX)
*/ */
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 374 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 366
REAL_LITERAL : REAL_LITERAL :
('.' (DECIMAL_DIGIT)+ (EXPONENT_PART)? (REAL_TYPE_SUFFIX)?) | ('.' (DECIMAL_DIGIT)+ (EXPONENT_PART)? (REAL_TYPE_SUFFIX)?) |
((DECIMAL_DIGIT)+ '.' (DECIMAL_DIGIT)+ (EXPONENT_PART)? (REAL_TYPE_SUFFIX)?) | ((DECIMAL_DIGIT)+ '.' (DECIMAL_DIGIT)+ (EXPONENT_PART)? (REAL_TYPE_SUFFIX)?) |
((DECIMAL_DIGIT)+ (EXPONENT_PART) (REAL_TYPE_SUFFIX)?) | ((DECIMAL_DIGIT)+ (EXPONENT_PART) (REAL_TYPE_SUFFIX)?) |
((DECIMAL_DIGIT)+ (REAL_TYPE_SUFFIX)); ((DECIMAL_DIGIT)+ (REAL_TYPE_SUFFIX));
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 380 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 372
fragment APOS : '\''! '\''; fragment APOS : '\''! '\'';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 381 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 373
fragment DECIMAL_DIGIT : '0'..'9' ; fragment DECIMAL_DIGIT : '0'..'9' ;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 382 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 374
fragment INTEGER_TYPE_SUFFIX : ( 'L' | 'l' ); fragment INTEGER_TYPE_SUFFIX : ( 'L' | 'l' );
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 383 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 375
fragment HEX_DIGIT : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'A'|'B'|'C'|'D'|'E'|'F'|'a'|'b'|'c'|'d'|'e'|'f'; fragment HEX_DIGIT : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'A'|'B'|'C'|'D'|'E'|'F'|'a'|'b'|'c'|'d'|'e'|'f';
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 385 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 377
fragment EXPONENT_PART : 'e' (SIGN)* (DECIMAL_DIGIT)+ | 'E' (SIGN)* (DECIMAL_DIGIT)+ ; fragment EXPONENT_PART : 'e' (SIGN)* (DECIMAL_DIGIT)+ | 'E' (SIGN)* (DECIMAL_DIGIT)+ ;
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 386 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 378
fragment SIGN : '+' | '-' ; fragment SIGN : '+' | '-' ;
// TODO what is M or m? // TODO what is M or m?
// $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 388 // $ANTLR src "/Users/aclement/el2/spring-framework/trunk/org.springframework.expression/src/main/java/org/springframework/expression/spel/generated/SpringExpressions.g" 380
fragment REAL_TYPE_SUFFIX : 'F' | 'f' | 'D' | 'd' | 'M' | 'm' ; fragment REAL_TYPE_SUFFIX : 'F' | 'f' | 'D' | 'd' | 'M' | 'm' ;
...@@ -39,7 +39,6 @@ import org.springframework.expression.spel.ast.MethodReference; ...@@ -39,7 +39,6 @@ import org.springframework.expression.spel.ast.MethodReference;
import org.springframework.expression.spel.ast.NullLiteral; import org.springframework.expression.spel.ast.NullLiteral;
import org.springframework.expression.spel.ast.OperatorAnd; import org.springframework.expression.spel.ast.OperatorAnd;
import org.springframework.expression.spel.ast.OperatorBetween; import org.springframework.expression.spel.ast.OperatorBetween;
import org.springframework.expression.spel.ast.OperatorDistanceTo;
import org.springframework.expression.spel.ast.OperatorDivide; import org.springframework.expression.spel.ast.OperatorDivide;
import org.springframework.expression.spel.ast.OperatorEquality; import org.springframework.expression.spel.ast.OperatorEquality;
import org.springframework.expression.spel.ast.OperatorGreaterThan; import org.springframework.expression.spel.ast.OperatorGreaterThan;
...@@ -49,7 +48,6 @@ import org.springframework.expression.spel.ast.OperatorInequality; ...@@ -49,7 +48,6 @@ import org.springframework.expression.spel.ast.OperatorInequality;
import org.springframework.expression.spel.ast.OperatorIs; import org.springframework.expression.spel.ast.OperatorIs;
import org.springframework.expression.spel.ast.OperatorLessThan; import org.springframework.expression.spel.ast.OperatorLessThan;
import org.springframework.expression.spel.ast.OperatorLessThanOrEqual; import org.springframework.expression.spel.ast.OperatorLessThanOrEqual;
import org.springframework.expression.spel.ast.OperatorLike;
import org.springframework.expression.spel.ast.OperatorMatches; import org.springframework.expression.spel.ast.OperatorMatches;
import org.springframework.expression.spel.ast.OperatorMinus; import org.springframework.expression.spel.ast.OperatorMinus;
import org.springframework.expression.spel.ast.OperatorModulus; import org.springframework.expression.spel.ast.OperatorModulus;
...@@ -57,7 +55,6 @@ import org.springframework.expression.spel.ast.OperatorMultiply; ...@@ -57,7 +55,6 @@ import org.springframework.expression.spel.ast.OperatorMultiply;
import org.springframework.expression.spel.ast.OperatorNot; import org.springframework.expression.spel.ast.OperatorNot;
import org.springframework.expression.spel.ast.OperatorOr; import org.springframework.expression.spel.ast.OperatorOr;
import org.springframework.expression.spel.ast.OperatorPlus; import org.springframework.expression.spel.ast.OperatorPlus;
import org.springframework.expression.spel.ast.OperatorSoundsLike;
import org.springframework.expression.spel.ast.Placeholder; import org.springframework.expression.spel.ast.Placeholder;
import org.springframework.expression.spel.ast.Projection; import org.springframework.expression.spel.ast.Projection;
import org.springframework.expression.spel.ast.PropertyOrFieldReference; import org.springframework.expression.spel.ast.PropertyOrFieldReference;
...@@ -110,10 +107,6 @@ public class SpelTreeAdaptor extends CommonTreeAdaptor { ...@@ -110,10 +107,6 @@ public class SpelTreeAdaptor extends CommonTreeAdaptor {
return new OperatorLessThanOrEqual(payload); return new OperatorLessThanOrEqual(payload);
case SpringExpressionsLexer.GREATER_THAN_OR_EQUAL: case SpringExpressionsLexer.GREATER_THAN_OR_EQUAL:
return new OperatorGreaterThanOrEqual(payload); return new OperatorGreaterThanOrEqual(payload);
case SpringExpressionsLexer.SOUNDSLIKE:
return new OperatorSoundsLike(payload);
case SpringExpressionsLexer.DISTANCETO:
return new OperatorDistanceTo(payload);
case SpringExpressionsLexer.PLUS: case SpringExpressionsLexer.PLUS:
return new OperatorPlus(payload); return new OperatorPlus(payload);
case SpringExpressionsLexer.MINUS: case SpringExpressionsLexer.MINUS:
...@@ -187,8 +180,6 @@ public class SpelTreeAdaptor extends CommonTreeAdaptor { ...@@ -187,8 +180,6 @@ public class SpelTreeAdaptor extends CommonTreeAdaptor {
case SpringExpressionsLexer.IN: case SpringExpressionsLexer.IN:
return new OperatorIn(payload); return new OperatorIn(payload);
case SpringExpressionsLexer.LIKE:
return new OperatorLike(payload);
case SpringExpressionsLexer.BETWEEN: case SpringExpressionsLexer.BETWEEN:
return new OperatorBetween(payload); return new OperatorBetween(payload);
case SpringExpressionsLexer.MATCHES: case SpringExpressionsLexer.MATCHES:
......
...@@ -57,26 +57,6 @@ public class EvaluationTests extends ExpressionTestCase { ...@@ -57,26 +57,6 @@ public class EvaluationTests extends ExpressionTestCase {
evaluate("name in {null, \"Anonymous\"}", "false", Boolean.class); evaluate("name in {null, \"Anonymous\"}", "false", Boolean.class);
} }
public void testRelOperatorsLike01() {
evaluate("'Abc' like 'A%_'", "true", Boolean.class);
}
public void testRelOperatorsLike02() {
evaluate("'Abc' like '..'", "false", Boolean.class);
}
public void testRelOperatorsLike03() {
evaluateAndCheckError("null like '.'", SpelMessages.INVALID_FIRST_OPERAND_FOR_LIKE_OPERATOR);
}
public void testRelOperatorsLike04() {
evaluateAndCheckError("'abc' like 2.0", SpelMessages.INVALID_SECOND_OPERAND_FOR_LIKE_OPERATOR);
}
public void testRelOperatorsLike05() {
evaluate("27 like '__'", "true", Boolean.class); // conversion int>string
}
public void testRelOperatorsBetween01() { public void testRelOperatorsBetween01() {
evaluate("1 between {1, 5}", "true", Boolean.class); evaluate("1 between {1, 5}", "true", Boolean.class);
} }
...@@ -137,7 +117,6 @@ public class EvaluationTests extends ExpressionTestCase { ...@@ -137,7 +117,6 @@ public class EvaluationTests extends ExpressionTestCase {
evaluate("27 matches '^.*2.*$'", true, Boolean.class); // conversion int>string evaluate("27 matches '^.*2.*$'", true, Boolean.class); // conversion int>string
} }
// mixing operators // mixing operators
public void testMixingOperators01() { public void testMixingOperators01() {
evaluate("true and 5>3", "true", Boolean.class); evaluate("true and 5>3", "true", Boolean.class);
...@@ -484,43 +463,6 @@ public class EvaluationTests extends ExpressionTestCase { ...@@ -484,43 +463,6 @@ public class EvaluationTests extends ExpressionTestCase {
evaluate("(#sqrt={|n| T(Math).sqrt($n)};#delegate={|f,n| $f($n)};#delegate(#sqrt,4))", "2.0", Double.class); evaluate("(#sqrt={|n| T(Math).sqrt($n)};#delegate={|f,n| $f($n)};#delegate(#sqrt,4))", "2.0", Double.class);
} }
// Soundex
public void testSoundex01() {
evaluate("'Rob' soundslike 'Rod'", "false", Boolean.class);
}
public void testSoundex02() {
evaluate("'Robert' soundslike 'Rupert'", "true", Boolean.class);
}
public void testSoundex03() {
evaluate("'Andy' soundslike 'Christian'", "false", Boolean.class);
}
public void testSoundex04() {
evaluate("@(fruits:).values().?{#this.colorName soundslike 'gren'}!=null", "true", Boolean.class);
}
public void testSoundex05() {
evaluate("@(fruits:).values().?{colorName soundslike 'gren'}!=null", "true", Boolean.class);
}
public void testSoundex06() {
evaluate("'Adrian' soundslike 'Adrain'", "true", Boolean.class);
}
// Word distance
public void testDistanceTo01() {
evaluate("'Saturday' distanceto 'Sunday'", "3", Integer.class);
evaluate("'Saturday' distanceto 'Monday'", "5", Integer.class);
evaluate("'Saturday' distanceto 'Saturdaz'", "1", Integer.class);
evaluate("'Saturday' distanceto 'Saturdab'", "1", Integer.class);
}
public void testDistanceTo02() {
evaluate("'Kitten' distanceto 'Sitting'", "3", Integer.class);
}
public void testVariableReferences() { public void testVariableReferences() {
evaluate("(#answer=42;#answer)", "42", Integer.class, true); evaluate("(#answer=42;#answer)", "42", Integer.class, true);
evaluate("($answer=42;$answer)", "42", Integer.class, true); evaluate("($answer=42;$answer)", "42", Integer.class, true);
......
...@@ -27,7 +27,7 @@ import org.springframework.expression.spel.standard.StandardEvaluationContext; ...@@ -27,7 +27,7 @@ import org.springframework.expression.spel.standard.StandardEvaluationContext;
/** /**
* Common superclass for expression tests. * Common superclass for expression tests.
* *
* @author Andy Clement * @author Andy Clement
*/ */
public abstract class ExpressionTestCase extends TestCase { public abstract class ExpressionTestCase extends TestCase {
...@@ -36,9 +36,9 @@ public abstract class ExpressionTestCase extends TestCase { ...@@ -36,9 +36,9 @@ public abstract class ExpressionTestCase extends TestCase {
protected final static boolean SHOULD_BE_WRITABLE = true; protected final static boolean SHOULD_BE_WRITABLE = true;
protected final static boolean SHOULD_NOT_BE_WRITABLE = false; protected final static boolean SHOULD_NOT_BE_WRITABLE = false;
protected static SpelExpressionParser parser = new SpelExpressionParser(); protected final static SpelExpressionParser parser = new SpelExpressionParser();
protected static StandardEvaluationContext eContext = TestScenarioCreator.getTestEvaluationContext(); protected final static StandardEvaluationContext eContext = TestScenarioCreator.getTestEvaluationContext();
/** /**
* Evaluate an expression and check that the actual result matches the expectedValue and the class of the result * Evaluate an expression and check that the actual result matches the expectedValue and the class of the result
...@@ -137,7 +137,7 @@ public abstract class ExpressionTestCase extends TestCase { ...@@ -137,7 +137,7 @@ public abstract class ExpressionTestCase extends TestCase {
* Evaluate an expression and check that the actual result matches the expectedValue and the class of the result * Evaluate an expression and check that the actual result matches the expectedValue and the class of the result
* matches the expectedClassOfResult. This method can also check if the expression is writable (for example, it is a * matches the expectedClassOfResult. This method can also check if the expression is writable (for example, it is a
* variable or property reference). * variable or property reference).
* *
* @param expression The expression to evaluate * @param expression The expression to evaluate
* @param expectedValue the expected result for evaluating the expression * @param expectedValue the expected result for evaluating the expression
* @param expectedClassOfResult the expected class of the evaluation result * @param expectedClassOfResult the expected class of the evaluation result
...@@ -335,7 +335,7 @@ public abstract class ExpressionTestCase extends TestCase { ...@@ -335,7 +335,7 @@ public abstract class ExpressionTestCase extends TestCase {
/** /**
* Produce a nice string representation of the input object. * Produce a nice string representation of the input object.
* *
* @param value object to be formatted * @param value object to be formatted
* @return a nice string * @return a nice string
*/ */
......
...@@ -22,7 +22,7 @@ import org.springframework.expression.ParseException; ...@@ -22,7 +22,7 @@ import org.springframework.expression.ParseException;
/** /**
* Parse some expressions and check we get the AST we expect. Rather than inspecting each node in the AST, we ask it to * Parse some expressions and check we get the AST we expect. Rather than inspecting each node in the AST, we ask it to
* write itself to a string form and check that is as expected. * write itself to a string form and check that is as expected.
* *
* @author Andy Clement * @author Andy Clement
*/ */
public class ParsingTests extends TestCase { public class ParsingTests extends TestCase {
...@@ -137,14 +137,6 @@ public class ParsingTests extends TestCase { ...@@ -137,14 +137,6 @@ public class ParsingTests extends TestCase {
parseCheck("3 in {1,2,3,4,5}", "(3 in {1,2,3,4,5})"); parseCheck("3 in {1,2,3,4,5}", "(3 in {1,2,3,4,5})");
} }
public void testRelOperatorsLike01() {
parseCheck("'Abc' like '[A-Z]b*'", "('Abc' like '[A-Z]b*')");
}
public void testRelOperatorsLike02() {
parseCheck("'Abc' like '?'", "('Abc' like '?')");
}
public void testRelOperatorsBetween01() { public void testRelOperatorsBetween01() {
parseCheck("1 between {1, 5}", "(1 between {1,5})"); parseCheck("1 between {1, 5}", "(1 between {1,5})");
} }
...@@ -418,7 +410,7 @@ public class ParsingTests extends TestCase { ...@@ -418,7 +410,7 @@ public class ParsingTests extends TestCase {
/** /**
* Parse the supplied expression and then create a string representation of the resultant AST, it should be the same * Parse the supplied expression and then create a string representation of the resultant AST, it should be the same
* as the original expression. * as the original expression.
* *
* @param expression the expression to parse *and* the expected value of the string form of the resultant AST * @param expression the expression to parse *and* the expected value of the string form of the resultant AST
*/ */
public void parseCheck(String expression) { public void parseCheck(String expression) {
...@@ -428,7 +420,7 @@ public class ParsingTests extends TestCase { ...@@ -428,7 +420,7 @@ public class ParsingTests extends TestCase {
/** /**
* Parse the supplied expression and then create a string representation of the resultant AST, it should be the * Parse the supplied expression and then create a string representation of the resultant AST, it should be the
* expected value. * expected value.
* *
* @param expression the expression to parse * @param expression the expression to parse
* @param expectedStringFormOfAST the expected string form of the AST * @param expectedStringFormOfAST the expected string form of the AST
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册