Skip to content

Commit ae8537f

Browse files
l46kokcopybara-github
authored andcommitted
Move evaluateExpr utility methods to validator and optimizer
PiperOrigin-RevId: 684956615
1 parent c31bc89 commit ae8537f

7 files changed

Lines changed: 40 additions & 98 deletions

File tree

common/ast/BUILD.bazel

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ java_library(
3030
exports = ["//common/src/main/java/dev/cel/common/ast:expr_factory"],
3131
)
3232

33-
java_library(
34-
name = "expr_util",
35-
exports = ["//common/src/main/java/dev/cel/common/ast:expr_util"],
36-
)
37-
3833
java_library(
3934
name = "mutable_expr",
4035
exports = ["//common/src/main/java/dev/cel/common/ast:mutable_expr"],

common/src/main/java/dev/cel/common/ast/BUILD.bazel

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,22 +103,6 @@ java_library(
103103
],
104104
)
105105

106-
java_library(
107-
name = "expr_util",
108-
srcs = ["CelExprUtil.java"],
109-
tags = [
110-
],
111-
deps = [
112-
":ast",
113-
"//bundle:cel",
114-
"//common",
115-
"//common:compiler_common",
116-
"//runtime",
117-
"@maven//:com_google_errorprone_error_prone_annotations",
118-
"@maven//:com_google_guava_guava",
119-
],
120-
)
121-
122106
java_library(
123107
name = "mutable_expr",
124108
srcs = MUTABLE_EXPR_SOURCES,

common/src/main/java/dev/cel/common/ast/CelExprUtil.java

Lines changed: 0 additions & 71 deletions
This file was deleted.

optimizer/src/main/java/dev/cel/optimizer/optimizers/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ java_library(
2323
"//common:compiler_common",
2424
"//common:mutable_ast",
2525
"//common/ast",
26-
"//common/ast:expr_util",
2726
"//common/ast:mutable_expr",
2827
"//common/navigation:mutable_navigation",
2928
"//extensions:optional_library",

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@
2424
import dev.cel.bundle.Cel;
2525
import dev.cel.common.CelAbstractSyntaxTree;
2626
import dev.cel.common.CelMutableAst;
27+
import dev.cel.common.CelSource;
2728
import dev.cel.common.CelValidationException;
2829
import dev.cel.common.ast.CelConstant;
30+
import dev.cel.common.ast.CelExpr;
2931
import dev.cel.common.ast.CelExpr.ExprKind.Kind;
30-
import dev.cel.common.ast.CelExprUtil;
3132
import dev.cel.common.ast.CelMutableExpr;
3233
import dev.cel.common.ast.CelMutableExpr.CelMutableCall;
3334
import dev.cel.common.ast.CelMutableExpr.CelMutableList;
@@ -248,7 +249,7 @@ private Optional<CelMutableAst> maybeFold(
248249
throws CelOptimizationException {
249250
Object result;
250251
try {
251-
result = CelExprUtil.evaluateExpr(cel, CelMutableExprConverter.fromMutableExpr(node.expr()));
252+
result = evaluateExpr(cel, CelMutableExprConverter.fromMutableExpr(node.expr()));
252253
} catch (CelValidationException | CelEvaluationException e) {
253254
throw new CelOptimizationException(
254255
"Constant folding failure. Failed to evaluate subtree due to: " + e.getMessage(), e);
@@ -591,6 +592,16 @@ private CelMutableAst pruneOptionalStructElements(CelMutableAst ast, CelMutableE
591592
return ast;
592593
}
593594

595+
@CanIgnoreReturnValue
596+
private static Object evaluateExpr(Cel cel, CelExpr expr)
597+
throws CelValidationException, CelEvaluationException {
598+
CelAbstractSyntaxTree ast =
599+
CelAbstractSyntaxTree.newParsedAst(expr, CelSource.newBuilder().build());
600+
ast = cel.check(ast).getAst();
601+
602+
return cel.createProgram(ast).eval();
603+
}
604+
594605
/** Options to configure how Constant Folding behave. */
595606
@AutoValue
596607
public abstract static class ConstantFoldingOptions {

validator/src/main/java/dev/cel/validator/validators/BUILD.bazel

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,13 @@ java_library(
9494
visibility = ["//visibility:private"],
9595
deps = [
9696
"//bundle:cel",
97+
"//common",
98+
"//common:compiler_common",
9799
"//common/ast",
98100
"//common/ast:expr_factory",
99-
"//common/ast:expr_util",
100101
"//common/navigation",
102+
"//runtime",
101103
"//validator:ast_validator",
104+
"@maven//:com_google_errorprone_error_prone_annotations",
102105
],
103106
)

validator/src/main/java/dev/cel/validator/validators/LiteralValidator.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@
1414

1515
package dev.cel.validator.validators;
1616

17+
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1718
import dev.cel.bundle.Cel;
19+
import dev.cel.common.CelAbstractSyntaxTree;
20+
import dev.cel.common.CelSource;
21+
import dev.cel.common.CelValidationException;
1822
import dev.cel.common.ast.CelExpr;
1923
import dev.cel.common.ast.CelExpr.ExprKind.Kind;
2024
import dev.cel.common.ast.CelExprFactory;
21-
import dev.cel.common.ast.CelExprUtil;
2225
import dev.cel.common.navigation.CelNavigableAst;
2326
import dev.cel.common.navigation.CelNavigableExpr;
27+
import dev.cel.runtime.CelEvaluationException;
2428
import dev.cel.validator.CelAstValidator;
2529

2630
/**
@@ -57,7 +61,7 @@ public void validate(CelNavigableAst navigableAst, Cel cel, IssuesFactory issues
5761
CelExpr callExpr =
5862
exprFactory.newGlobalCall(functionName, exprFactory.newConstant(expr.constant()));
5963
try {
60-
CelExprUtil.evaluateExpr(cel, callExpr, expectedResultType);
64+
evaluateExpr(cel, callExpr, expectedResultType);
6165
} catch (Exception e) {
6266
issuesFactory.addError(
6367
expr.id(),
@@ -66,4 +70,21 @@ public void validate(CelNavigableAst navigableAst, Cel cel, IssuesFactory issues
6670
}
6771
});
6872
}
73+
74+
@CanIgnoreReturnValue
75+
private static Object evaluateExpr(Cel cel, CelExpr expr, Class<?> expectedResultType)
76+
throws CelValidationException, CelEvaluationException {
77+
CelAbstractSyntaxTree ast =
78+
CelAbstractSyntaxTree.newParsedAst(expr, CelSource.newBuilder().build());
79+
ast = cel.check(ast).getAst();
80+
Object result = cel.createProgram(ast).eval();
81+
82+
if (!expectedResultType.isInstance(result)) {
83+
throw new IllegalStateException(
84+
String.format(
85+
"Expected %s type but got %s instead",
86+
expectedResultType.getName(), result.getClass().getName()));
87+
}
88+
return result;
89+
}
6990
}

0 commit comments

Comments
 (0)