Browse Source

Polishing

Issue: SPR-14863
pull/1156/head
Juergen Hoeller 9 years ago
parent
commit
82fa4ef274
  1. 12
      spring-expression/src/main/java/org/springframework/expression/spel/ast/OpEQ.java
  2. 12
      spring-expression/src/main/java/org/springframework/expression/spel/ast/OpNE.java
  3. 10
      spring-expression/src/main/java/org/springframework/expression/spel/ast/Operator.java
  4. 2310
      spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java

12
spring-expression/src/main/java/org/springframework/expression/spel/ast/OpEQ.java

@ -36,9 +36,9 @@ public class OpEQ extends Operator { @@ -36,9 +36,9 @@ public class OpEQ extends Operator {
this.exitTypeDescriptor = "Z";
}
@Override
public BooleanTypedValue getValueInternal(ExpressionState state)
throws EvaluationException {
public BooleanTypedValue getValueInternal(ExpressionState state) throws EvaluationException {
Object left = getLeftOperand().getValueInternal(state).getValue();
Object right = getRightOperand().getValueInternal(state).getValue();
this.leftActualDescriptor = CodeFlow.toDescriptorFromObject(left);
@ -86,11 +86,9 @@ public class OpEQ extends Operator { @@ -86,11 +86,9 @@ public class OpEQ extends Operator {
}
String operatorClassName = Operator.class.getName().replace('.', '/');
String evaluationContextClassName = EvaluationContext.class.getName().replace('.',
'/');
mv.visitMethodInsn(INVOKESTATIC, operatorClassName, "equalityCheck", "(L"
+ evaluationContextClassName + ";Ljava/lang/Object;Ljava/lang/Object;)Z",
false);
String evaluationContextClassName = EvaluationContext.class.getName().replace('.', '/');
mv.visitMethodInsn(INVOKESTATIC, operatorClassName, "equalityCheck",
"(L" + evaluationContextClassName + ";Ljava/lang/Object;Ljava/lang/Object;)Z", false);
cf.pushDescriptor("Z");
}

12
spring-expression/src/main/java/org/springframework/expression/spel/ast/OpNE.java

@ -37,9 +37,9 @@ public class OpNE extends Operator { @@ -37,9 +37,9 @@ public class OpNE extends Operator {
this.exitTypeDescriptor = "Z";
}
@Override
public BooleanTypedValue getValueInternal(ExpressionState state)
throws EvaluationException {
public BooleanTypedValue getValueInternal(ExpressionState state) throws EvaluationException {
Object left = getLeftOperand().getValueInternal(state).getValue();
Object right = getRightOperand().getValueInternal(state).getValue();
this.leftActualDescriptor = CodeFlow.toDescriptorFromObject(left);
@ -87,11 +87,9 @@ public class OpNE extends Operator { @@ -87,11 +87,9 @@ public class OpNE extends Operator {
}
String operatorClassName = Operator.class.getName().replace('.', '/');
String evaluationContextClassName = EvaluationContext.class.getName().replace('.',
'/');
mv.visitMethodInsn(INVOKESTATIC, operatorClassName, "equalityCheck", "(L"
+ evaluationContextClassName + ";Ljava/lang/Object;Ljava/lang/Object;)Z",
false);
String evaluationContextClassName = EvaluationContext.class.getName().replace('.', '/');
mv.visitMethodInsn(INVOKESTATIC, operatorClassName, "equalityCheck",
"(L" + evaluationContextClassName + ";Ljava/lang/Object;Ljava/lang/Object;)Z", false);
// Invert the boolean
Label notZero = new Label();

10
spring-expression/src/main/java/org/springframework/expression/spel/ast/Operator.java

@ -159,6 +159,16 @@ public abstract class Operator extends SpelNodeImpl { @@ -159,6 +159,16 @@ public abstract class Operator extends SpelNodeImpl {
cf.pushDescriptor("Z");
}
/**
* Perform an equality check for the given operand values.
* <p>This method is not just used for reflective comparisons in subclasses
* but also from compiled expression code, which is why it needs to be
* declared as {@code public static} here.
* @param context the current evaluation context
* @param left the left-hand operand value
* @param right the right-hand operand value
*/
public static boolean equalityCheck(EvaluationContext context, Object left, Object right) {
if (left instanceof Number && right instanceof Number) {
Number leftNumber = (Number) left;

2310
spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save