Merge branch '5.2.x'
# Conflicts: # spring-expression/src/main/java/org/springframework/expression/spel/ast/MethodReference.java
This commit is contained in:
@@ -38,7 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*/
|
||||
class SpelCompilerTests {
|
||||
|
||||
@Test // gh-24357
|
||||
@Test // gh-24357
|
||||
void expressionCompilesWhenMethodComesFromPublicInterface() {
|
||||
SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null);
|
||||
SpelExpressionParser parser = new SpelExpressionParser(config);
|
||||
@@ -50,6 +50,31 @@ class SpelCompilerTests {
|
||||
IntStream.rangeClosed(1, 5).forEach(i -> assertThat(expression.getValue(component)).isEqualTo(42));
|
||||
}
|
||||
|
||||
@Test // gh-25706
|
||||
void defaultMethodInvocation() {
|
||||
SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null);
|
||||
SpelExpressionParser parser = new SpelExpressionParser(config);
|
||||
|
||||
StandardEvaluationContext context = new StandardEvaluationContext();
|
||||
Item item = new Item();
|
||||
context.setRootObject(item);
|
||||
|
||||
Expression expression = parser.parseExpression("#root.isEditable2()");
|
||||
assertThat(SpelCompiler.compile(expression)).isFalse();
|
||||
assertThat(expression.getValue(context)).isEqualTo(false);
|
||||
assertThat(SpelCompiler.compile(expression)).isTrue();
|
||||
SpelCompilationCoverageTests.assertIsCompiled(expression);
|
||||
assertThat(expression.getValue(context)).isEqualTo(false);
|
||||
|
||||
context.setVariable("user", new User());
|
||||
expression = parser.parseExpression("#root.isEditable(#user)");
|
||||
assertThat(SpelCompiler.compile(expression)).isFalse();
|
||||
assertThat(expression.getValue(context)).isEqualTo(true);
|
||||
assertThat(SpelCompiler.compile(expression)).isTrue();
|
||||
SpelCompilationCoverageTests.assertIsCompiled(expression);
|
||||
assertThat(expression.getValue(context)).isEqualTo(true);
|
||||
}
|
||||
|
||||
|
||||
static class OrderedComponent implements Ordered {
|
||||
|
||||
@@ -114,4 +139,40 @@ class SpelCompilerTests {
|
||||
boolean hasSomeProperty();
|
||||
}
|
||||
|
||||
|
||||
public static class User {
|
||||
|
||||
boolean isAdmin() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class Item implements Editable {
|
||||
|
||||
// some fields
|
||||
private String someField = "";
|
||||
|
||||
// some getters and setters
|
||||
|
||||
@Override
|
||||
public boolean hasSomeProperty() {
|
||||
return someField != null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public interface Editable {
|
||||
|
||||
default boolean isEditable(User user) {
|
||||
return user.isAdmin() && hasSomeProperty();
|
||||
}
|
||||
|
||||
default boolean isEditable2() {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean hasSomeProperty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user