Skip to content

Commit d76c341

Browse files
Merge pull request #199 from l46kok:fix-const-fold-with-list
PiperOrigin-RevId: 592940954
2 parents 95714d0 + 37799bc commit d76c341

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
bazel-bin
33
bazel-examples
44
bazel-genfiles
5-
bazel-grpc-java
5+
bazel-cel-java
66
bazel-out
77
bazel-testlogs
88

@@ -27,4 +27,4 @@ bin
2727
target
2828

2929
# Temporary output dir for artifacts
30-
mvn-artifacts
30+
mvn-artifacts

optimizer/src/main/java/dev/cel/optimizer/optimizers/ConstantFoldingOptimizer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,12 @@ private Optional<CelAbstractSyntaxTree> maybePruneBranches(
299299

300300
return Optional.of(replaceSubtree(ast, result, expr.id()));
301301
} else if (function.equals(Operator.IN.getFunction())) {
302-
CelCreateList haystack = call.args().get(1).createList();
302+
CelExpr callArg = call.args().get(1);
303+
if (!callArg.exprKind().getKind().equals(Kind.CREATE_LIST)) {
304+
return Optional.empty();
305+
}
306+
307+
CelCreateList haystack = callArg.createList();
303308
if (haystack.elements().isEmpty()) {
304309
return Optional.of(
305310
replaceSubtree(

optimizer/src/test/java/dev/cel/optimizer/optimizers/ConstantFoldingOptimizerTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import dev.cel.bundle.CelFactory;
2424
import dev.cel.common.CelAbstractSyntaxTree;
2525
import dev.cel.common.CelOptions;
26+
import dev.cel.common.types.ListType;
27+
import dev.cel.common.types.MapType;
2628
import dev.cel.common.types.SimpleType;
2729
import dev.cel.extensions.CelOptionalLibrary;
2830
import dev.cel.optimizer.CelOptimizationException;
@@ -41,6 +43,8 @@ public class ConstantFoldingOptimizerTest {
4143
CelFactory.standardCelBuilder()
4244
.addVar("x", SimpleType.DYN)
4345
.addVar("y", SimpleType.DYN)
46+
.addVar("list_var", ListType.create(SimpleType.STRING))
47+
.addVar("map_var", MapType.create(SimpleType.STRING, SimpleType.STRING))
4448
.addMessageTypes(TestAllTypes.getDescriptor())
4549
.setContainer("dev.cel.testing.testdata.proto3")
4650
.addCompilerLibraries(CelOptionalLibrary.INSTANCE)
@@ -152,6 +156,8 @@ public class ConstantFoldingOptimizerTest {
152156
@TestParameters("{source: 'x + dyn([1, 2] + [3, 4])', expected: 'x + [1, 2, 3, 4]'}")
153157
@TestParameters(
154158
"{source: '{\"a\": dyn([1, 2]), \"b\": x}', expected: '{\"a\": [1, 2], \"b\": x}'}")
159+
@TestParameters("{source: 'map_var[?\"key\"]', expected: 'map_var[?\"key\"]'}")
160+
@TestParameters("{source: '\"abc\" in list_var', expected: '\"abc\" in list_var'}")
155161
// TODO: Support folding lists with mixed types. This requires mutable lists.
156162
// @TestParameters("{source: 'dyn([1]) + [1.0]'}")
157163
public void constantFold_success(String source, String expected) throws Exception {

0 commit comments

Comments
 (0)