Skip to content

Commit 2f9fd88

Browse files
committed
fix list get when precise true
1 parent 7175706 commit 2f9fd88

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/main/java/com/alibaba/qlexpress4/runtime/MemberResolver.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public enum MatchPriority {
2020
MISMATCH(-1),
2121
// e.g. Integer -> Number
2222
EXTEND(0),
23+
// e.g. BigDecimal -> int
24+
NUMBER_DEMOTION(9),
2325
// e.g. int -> long
2426
// 1 -> 8
2527
NUMBER_PROMOTION(8),
@@ -227,8 +229,9 @@ private static int resolveArgPriority(Class<?> paramType, Class<?> argType) {
227229

228230
Integer paramNumLevel = BasicUtil.numberPromoteLevel(paramType);
229231
Integer argNumLevel = BasicUtil.numberPromoteLevel(argType);
230-
if (paramNumLevel != null && argNumLevel != null && paramNumLevel >= argNumLevel) {
231-
return MatchPriority.NUMBER_PROMOTION.priority + argNumLevel - paramNumLevel;
232+
if (paramNumLevel != null && argNumLevel != null) {
233+
return paramNumLevel >= argNumLevel ? MatchPriority.NUMBER_PROMOTION.priority + argNumLevel - paramNumLevel
234+
: MatchPriority.NUMBER_DEMOTION.priority;
232235
}
233236

234237
// Handle primitive to Object boxing conversion

src/test/java/com/alibaba/qlexpress4/Express4RunnerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,20 @@ public void customSelectorWhenNoCloseTest() {
12511251
assertErrorCode(express4Runner, "'Hello ' + ${pl}", QLErrorCodes.SYNTAX_ERROR.name());
12521252
}
12531253

1254+
@Test
1255+
public void listGetWhenPreciseTest() {
1256+
InitOptions initOptions = InitOptions.builder().securityStrategy(QLSecurityStrategy.open()).build();
1257+
Express4Runner runner = new Express4Runner(initOptions);
1258+
QLOptions qlOptions = QLOptions.builder().precise(true).cache(true).build();
1259+
Map<String, Object> context = new HashMap<>();
1260+
ArrayList<String> list = new ArrayList<>();
1261+
list.add("a");
1262+
list.add("b");
1263+
context.put("list", list);
1264+
QLResult result = runner.execute("list.get(list.size()-1);", context, qlOptions);
1265+
assertEquals("b", result.getResult());
1266+
}
1267+
12541268
private void assertResultEquals(Express4Runner express4Runner, String script, Object expect) {
12551269
assertResultPredicate(express4Runner, script, result -> Objects.equals(expect, result));
12561270
}

0 commit comments

Comments
 (0)