Skip to content

Commit b037fcf

Browse files
committed
Correct the Elvis (?:) operator and add null coalescing (??) operator
1 parent 511ffac commit b037fcf

File tree

7 files changed

+516
-368
lines changed

7 files changed

+516
-368
lines changed

java/org/apache/el/parser/AstElvis.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import jakarta.el.ELException;
2222

23+
import org.apache.el.lang.ELSupport;
2324
import org.apache.el.lang.EvaluationContext;
2425

2526
public class AstElvis extends SimpleNode {
@@ -36,10 +37,11 @@ public Class<?> getType(EvaluationContext ctx) throws ELException {
3637
@Override
3738
public Object getValue(EvaluationContext ctx) throws ELException {
3839
Object obj0 = this.children[0].getValue(ctx);
39-
if (obj0 == null) {
40-
return this.children[1].getValue(ctx);
41-
} else {
40+
Boolean b = ELSupport.coerceToBoolean(ctx, obj0, true);
41+
if (b.booleanValue()) {
4242
return obj0;
43+
} else {
44+
return this.children[1].getValue(ctx);
4345
}
4446
}
4547
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
/* Generated By:JJTree: Do not edit this line. AstNullCoalescing.java Version 7.0 */
18+
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=false,TRACK_TOKENS=false,NODE_PREFIX=Ast,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
19+
package org.apache.el.parser;
20+
21+
import jakarta.el.ELException;
22+
23+
import org.apache.el.lang.EvaluationContext;
24+
25+
public class AstNullCoalescing extends SimpleNode {
26+
public AstNullCoalescing(int id) {
27+
super(id);
28+
}
29+
30+
@Override
31+
public Class<?> getType(EvaluationContext ctx) throws ELException {
32+
Object val = this.getValue(ctx);
33+
return (val != null) ? val.getClass() : null;
34+
}
35+
36+
@Override
37+
public Object getValue(EvaluationContext ctx) throws ELException {
38+
Object obj0 = this.children[0].getValue(ctx);
39+
if (obj0 == null) {
40+
return this.children[1].getValue(ctx);
41+
} else {
42+
return obj0;
43+
}
44+
}
45+
}
46+
/* JavaCC - OriginalChecksum=7f7cabdfdef87abc6e6a22ac32db0871 (do not edit this line) */

0 commit comments

Comments
 (0)