Merge branch '6.1.x'
This commit is contained in:
commit
90867e7e62
|
@ -518,6 +518,7 @@ following kinds of expressions cannot be compiled.
|
||||||
* Expressions relying on the conversion service
|
* Expressions relying on the conversion service
|
||||||
* Expressions using custom resolvers or accessors
|
* Expressions using custom resolvers or accessors
|
||||||
* Expressions using overloaded operators
|
* Expressions using overloaded operators
|
||||||
|
* Expressions using array construction syntax
|
||||||
* Expressions using selection or projection
|
* Expressions using selection or projection
|
||||||
|
|
||||||
Compilation of additional kinds of expressions may be supported in the future.
|
Compilation of additional kinds of expressions may be supported in the future.
|
||||||
|
|
|
@ -13,7 +13,7 @@ Java::
|
||||||
int[] numbers1 = (int[]) parser.parseExpression("new int[4]").getValue(context);
|
int[] numbers1 = (int[]) parser.parseExpression("new int[4]").getValue(context);
|
||||||
|
|
||||||
// Array with initializer
|
// Array with initializer
|
||||||
int[] numbers2 = (int[]) parser.parseExpression("new int[]{1,2,3}").getValue(context);
|
int[] numbers2 = (int[]) parser.parseExpression("new int[] {1, 2, 3}").getValue(context);
|
||||||
|
|
||||||
// Multi dimensional array
|
// Multi dimensional array
|
||||||
int[][] numbers3 = (int[][]) parser.parseExpression("new int[4][5]").getValue(context);
|
int[][] numbers3 = (int[][]) parser.parseExpression("new int[4][5]").getValue(context);
|
||||||
|
@ -26,14 +26,22 @@ Kotlin::
|
||||||
val numbers1 = parser.parseExpression("new int[4]").getValue(context) as IntArray
|
val numbers1 = parser.parseExpression("new int[4]").getValue(context) as IntArray
|
||||||
|
|
||||||
// Array with initializer
|
// Array with initializer
|
||||||
val numbers2 = parser.parseExpression("new int[]{1,2,3}").getValue(context) as IntArray
|
val numbers2 = parser.parseExpression("new int[] {1, 2, 3}").getValue(context) as IntArray
|
||||||
|
|
||||||
// Multi dimensional array
|
// Multi dimensional array
|
||||||
val numbers3 = parser.parseExpression("new int[4][5]").getValue(context) as Array<IntArray>
|
val numbers3 = parser.parseExpression("new int[4][5]").getValue(context) as Array<IntArray>
|
||||||
----
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
====
|
||||||
You cannot currently supply an initializer when you construct a multi-dimensional array.
|
You cannot currently supply an initializer when you construct a multi-dimensional array.
|
||||||
|
====
|
||||||
|
|
||||||
|
[CAUTION]
|
||||||
|
====
|
||||||
|
Any expression that constructs an array – for example, via `new int[4]` or
|
||||||
|
`new int[] {1, 2, 3}` – cannot be compiled. See
|
||||||
|
xref:core/expressions/evaluation.adoc#expressions-compiler-limitations[Compiler Limitations]
|
||||||
|
for details.
|
||||||
|
====
|
||||||
|
|
|
@ -263,6 +263,12 @@ public class Indexer extends SpelNodeImpl {
|
||||||
}
|
}
|
||||||
case "B" -> {
|
case "B" -> {
|
||||||
mv.visitTypeInsn(CHECKCAST, "[B");
|
mv.visitTypeInsn(CHECKCAST, "[B");
|
||||||
|
// byte and boolean arrays are both loaded via BALOAD
|
||||||
|
yield BALOAD;
|
||||||
|
}
|
||||||
|
case "Z" -> {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[Z");
|
||||||
|
// byte and boolean arrays are both loaded via BALOAD
|
||||||
yield BALOAD;
|
yield BALOAD;
|
||||||
}
|
}
|
||||||
case "C" -> {
|
case "C" -> {
|
||||||
|
|
|
@ -309,6 +309,18 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
|
||||||
assertThat(getAst().getExitDescriptor()).isEqualTo("C");
|
assertThat(getAst().getExitDescriptor()).isEqualTo("C");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void indexIntoPrimitiveBooleanArray() {
|
||||||
|
boolean[] booleans = { true, false };
|
||||||
|
|
||||||
|
expression = parser.parseExpression("[1]");
|
||||||
|
|
||||||
|
assertThat(expression.getValue(booleans)).isEqualTo(false);
|
||||||
|
assertCanCompile(expression);
|
||||||
|
assertThat(expression.getValue(booleans)).isEqualTo(false);
|
||||||
|
assertThat(getAst().getExitDescriptor()).isEqualTo("Z");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void indexIntoStringArray() {
|
void indexIntoStringArray() {
|
||||||
String[] strings = { "a", "b", "c" };
|
String[] strings = { "a", "b", "c" };
|
||||||
|
|
Loading…
Reference in New Issue