Skip to content

Commit f0dacb5

Browse files
l46kokcopybara-github
authored andcommitted
Internal Changes
PiperOrigin-RevId: 834975953
1 parent d4e4984 commit f0dacb5

File tree

56 files changed

+1378
-573
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1378
-573
lines changed

bundle/src/main/java/dev/cel/bundle/CelBuilder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,7 @@ public interface CelBuilder {
197197
* provider will be used first before falling back to the built-in {@link
198198
* dev.cel.common.values.ProtoMessageValueProvider} for resolving protobuf messages.
199199
*
200-
* <p>Note that {@link CelOptions#enableCelValue()} must be enabled or this method will be a
201-
* no-op.
200+
* <p>Note that this option is only supported for planner-based runtime.
202201
*/
203202
@CanIgnoreReturnValue
204203
CelBuilder setValueProvider(CelValueProvider celValueProvider);

bundle/src/test/java/dev/cel/bundle/CelImplTest.java

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -560,24 +560,6 @@ public void program_withVars() throws Exception {
560560
assertThat(program.eval(ImmutableMap.of("variable", "hello"))).isEqualTo(true);
561561
}
562562

563-
@Test
564-
public void program_withCelValue() throws Exception {
565-
Cel cel =
566-
standardCelBuilderWithMacros()
567-
.setOptions(CelOptions.current().enableCelValue(true).build())
568-
.addDeclarations(
569-
Decl.newBuilder()
570-
.setName("variable")
571-
.setIdent(IdentDecl.newBuilder().setType(CelProtoTypes.STRING))
572-
.build())
573-
.setResultType(SimpleType.BOOL)
574-
.build();
575-
576-
CelRuntime.Program program = cel.createProgram(cel.compile("variable == 'hello'").getAst());
577-
578-
assertThat(program.eval(ImmutableMap.of("variable", "hello"))).isEqualTo(true);
579-
}
580-
581563
@Test
582564
public void program_withProtoVars() throws Exception {
583565
Cel cel =
@@ -1426,26 +1408,6 @@ public void programAdvanceEvaluation_nestedSelect() throws Exception {
14261408
.isEqualTo(CelUnknownSet.create(CelAttribute.fromQualifiedIdentifier("com.google.a")));
14271409
}
14281410

1429-
@Test
1430-
public void programAdvanceEvaluation_nestedSelect_withCelValue() throws Exception {
1431-
Cel cel =
1432-
standardCelBuilderWithMacros()
1433-
.setOptions(
1434-
CelOptions.current().enableUnknownTracking(true).enableCelValue(true).build())
1435-
.addVar("com", MapType.create(SimpleType.STRING, SimpleType.DYN))
1436-
.addFunctionBindings()
1437-
.setResultType(SimpleType.BOOL)
1438-
.build();
1439-
CelRuntime.Program program = cel.createProgram(cel.compile("com.google.a || false").getAst());
1440-
1441-
assertThat(
1442-
program.advanceEvaluation(
1443-
UnknownContext.create(
1444-
fromMap(ImmutableMap.of()),
1445-
ImmutableList.of(CelAttributePattern.fromQualifiedIdentifier("com.google.a")))))
1446-
.isEqualTo(CelUnknownSet.create(CelAttribute.fromQualifiedIdentifier("com.google.a")));
1447-
}
1448-
14491411
@Test
14501412
public void programAdvanceEvaluation_argumentMergeErrorPriority() throws Exception {
14511413
Cel cel =

checker/src/main/java/dev/cel/checker/DescriptorTypeProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ public DescriptorTypeProvider() {
6767
/**
6868
* Constructs a provider based on the given file descriptor set proto, as it is emitted by the
6969
* protocol compiler.
70+
*
71+
* @deprecated Do not use. Migrate to CEL-Java fluent APIs.
7072
*/
73+
@Deprecated
7174
public DescriptorTypeProvider(FileDescriptorSet descriptorSet) {
7275
this(FileDescriptorSetConverter.convert(descriptorSet));
7376
}

common/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ java_library(
2222
exports = ["//common/src/main/java/dev/cel/common:container"],
2323
)
2424

25+
cel_android_library(
26+
name = "container_android",
27+
exports = ["//common/src/main/java/dev/cel/common:container_android"],
28+
)
29+
2530
java_library(
2631
name = "proto_ast",
2732
exports = ["//common/src/main/java/dev/cel/common:proto_ast"],

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,18 @@ java_library(
342342
],
343343
)
344344

345+
cel_android_library(
346+
name = "container_android",
347+
srcs = ["CelContainer.java"],
348+
tags = [
349+
],
350+
deps = [
351+
"//:auto_value",
352+
"@maven//:com_google_errorprone_error_prone_annotations",
353+
"@maven_android//:com_google_guava_guava",
354+
],
355+
)
356+
345357
java_library(
346358
name = "operator",
347359
srcs = ["Operator.java"],

common/src/main/java/dev/cel/common/CelOptions.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.google.auto.value.AutoValue;
1818
import com.google.errorprone.annotations.CheckReturnValue;
1919
import com.google.errorprone.annotations.Immutable;
20-
import dev.cel.common.annotations.Beta;
2120

2221
/**
2322
* Options to configure how the CEL parser, type-checker, and evaluator behave.
@@ -107,8 +106,6 @@ public enum ProtoUnsetFieldOptions {
107106

108107
public abstract boolean enableUnknownTracking();
109108

110-
public abstract boolean enableCelValue();
111-
112109
public abstract int comprehensionMaxIterations();
113110

114111
public abstract boolean evaluateCanonicalTypesToNativeValues();
@@ -165,7 +162,6 @@ public static Builder newBuilder() {
165162
.errorOnDuplicateMapKeys(false)
166163
.resolveTypeDependencies(true)
167164
.enableUnknownTracking(false)
168-
.enableCelValue(false)
169165
.comprehensionMaxIterations(-1)
170166
.unwrapWellKnownTypesOnFunctionDispatch(true)
171167
.fromProtoUnsetFieldOption(ProtoUnsetFieldOptions.BIND_DEFAULT)
@@ -435,16 +431,6 @@ public abstract static class Builder {
435431
*/
436432
public abstract Builder enableUnknownTracking(boolean value);
437433

438-
/**
439-
* Enables the usage of {@code CelValue} for the runtime. It is a native value representation of
440-
* CEL that wraps Java native objects, and comes with extended capabilities, such as allowing
441-
* value constructs not understood by CEL (ex: POJOs).
442-
*
443-
* <p>Warning: This option is experimental.
444-
*/
445-
@Beta
446-
public abstract Builder enableCelValue(boolean value);
447-
448434
/**
449435
* Limit the total number of iterations permitted within comprehension loops.
450436
*

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,32 @@ java_library(
183183
],
184184
)
185185

186+
java_library(
187+
name = "message_lite_type_provider",
188+
srcs = [
189+
"ProtoMessageLiteTypeProvider.java",
190+
],
191+
tags = [
192+
],
193+
deps = [
194+
"//common/types",
195+
"//common/types:type_providers",
196+
"//protobuf:cel_lite_descriptor",
197+
"@maven//:com_google_guava_guava",
198+
],
199+
)
200+
201+
cel_android_library(
202+
name = "message_lite_type_provider_android",
203+
srcs = [
204+
"ProtoMessageLiteTypeProvider.java",
205+
],
206+
tags = [
207+
],
208+
deps = [
209+
],
210+
)
211+
186212
java_library(
187213
name = "default_type_provider",
188214
srcs = [
@@ -193,10 +219,26 @@ java_library(
193219
deps = [
194220
":type_providers",
195221
":types",
222+
"@maven//:com_google_errorprone_error_prone_annotations",
196223
"@maven//:com_google_guava_guava",
197224
],
198225
)
199226

227+
cel_android_library(
228+
name = "default_type_provider_android",
229+
srcs = [
230+
"DefaultTypeProvider.java",
231+
],
232+
tags = [
233+
],
234+
deps = [
235+
":type_providers_android",
236+
":types_android",
237+
"@maven//:com_google_errorprone_error_prone_annotations",
238+
"@maven_android//:com_google_guava_guava",
239+
],
240+
)
241+
200242
cel_android_library(
201243
name = "cel_types_android",
202244
srcs = ["CelTypes.java"],

common/src/main/java/dev/cel/common/types/DefaultTypeProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
import com.google.common.collect.ImmutableCollection;
1818
import com.google.common.collect.ImmutableMap;
19+
import com.google.errorprone.annotations.Immutable;
1920
import java.util.Optional;
2021

2122
/** {@code DefaultTypeProvider} is a registry of common CEL types. */
23+
@Immutable
2224
public class DefaultTypeProvider implements CelTypeProvider {
2325

2426
private static final DefaultTypeProvider INSTANCE = new DefaultTypeProvider();
@@ -43,6 +45,7 @@ private DefaultTypeProvider() {
4345
typeMapBuilder.putAll(SimpleType.TYPE_MAP);
4446
typeMapBuilder.put("list", ListType.create(SimpleType.DYN));
4547
typeMapBuilder.put("map", MapType.create(SimpleType.DYN, SimpleType.DYN));
48+
typeMapBuilder.put("type", TypeType.create(SimpleType.DYN));
4649
typeMapBuilder.put(
4750
"optional_type",
4851
// TODO: Move to CelOptionalLibrary and register it on demand
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright 2025 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package dev.cel.common.types;
16+
17+
import static com.google.common.collect.ImmutableMap.toImmutableMap;
18+
19+
import com.google.common.collect.ImmutableCollection;
20+
import com.google.common.collect.ImmutableMap;
21+
import com.google.common.collect.ImmutableSet;
22+
import dev.cel.protobuf.CelLiteDescriptor;
23+
import dev.cel.protobuf.CelLiteDescriptor.FieldLiteDescriptor;
24+
import dev.cel.protobuf.CelLiteDescriptor.MessageLiteDescriptor;
25+
import java.util.Map.Entry;
26+
import java.util.Optional;
27+
import java.util.Set;
28+
import java.util.function.Function;
29+
30+
/** TODO: Add */
31+
public final class ProtoMessageLiteTypeProvider implements CelTypeProvider {
32+
private static final ImmutableMap<FieldLiteDescriptor.Type, CelType> PROTO_TYPE_TO_CEL_TYPE =
33+
ImmutableMap.<FieldLiteDescriptor.Type, CelType>builder()
34+
.put(FieldLiteDescriptor.Type.DOUBLE, SimpleType.DOUBLE)
35+
.put(FieldLiteDescriptor.Type.FLOAT, SimpleType.DOUBLE)
36+
.put(FieldLiteDescriptor.Type.INT64, SimpleType.INT)
37+
.put(FieldLiteDescriptor.Type.INT32, SimpleType.INT)
38+
.put(FieldLiteDescriptor.Type.SFIXED32, SimpleType.INT)
39+
.put(FieldLiteDescriptor.Type.SFIXED64, SimpleType.INT)
40+
.put(FieldLiteDescriptor.Type.SINT32, SimpleType.INT)
41+
.put(FieldLiteDescriptor.Type.SINT64, SimpleType.INT)
42+
.put(FieldLiteDescriptor.Type.BOOL, SimpleType.BOOL)
43+
.put(FieldLiteDescriptor.Type.STRING, SimpleType.STRING)
44+
.put(FieldLiteDescriptor.Type.BYTES, SimpleType.BYTES)
45+
.put(FieldLiteDescriptor.Type.FIXED32, SimpleType.UINT)
46+
.put(FieldLiteDescriptor.Type.FIXED64, SimpleType.UINT)
47+
.put(FieldLiteDescriptor.Type.UINT32, SimpleType.UINT)
48+
.put(FieldLiteDescriptor.Type.UINT64, SimpleType.UINT)
49+
.buildOrThrow();
50+
51+
private final ImmutableMap<String, CelType> allTypes;
52+
53+
@Override
54+
public ImmutableCollection<CelType> types() {
55+
return allTypes.values();
56+
}
57+
58+
@Override
59+
public Optional<CelType> findType(String typeName) {
60+
return Optional.empty();
61+
}
62+
63+
public static ProtoMessageLiteTypeProvider newInstance(CelLiteDescriptor... celLiteDescriptors) {
64+
return newInstance(ImmutableSet.copyOf(celLiteDescriptors));
65+
}
66+
67+
public static ProtoMessageLiteTypeProvider newInstance(
68+
Set<CelLiteDescriptor> celLiteDescriptors) {
69+
return new ProtoMessageLiteTypeProvider(celLiteDescriptors);
70+
}
71+
72+
private ProtoMessageLiteTypeProvider(Set<CelLiteDescriptor> celLiteDescriptors) {
73+
ImmutableMap.Builder<String, CelType> builder = ImmutableMap.builder();
74+
for (CelLiteDescriptor descriptor : celLiteDescriptors) {
75+
for (Entry<String, MessageLiteDescriptor> entry :
76+
descriptor.getProtoTypeNamesToDescriptors().entrySet()) {
77+
builder.put(entry.getKey(), createMessageType(entry.getValue()));
78+
}
79+
}
80+
81+
this.allTypes = builder.buildOrThrow();
82+
}
83+
84+
private static ProtoMessageType createMessageType(MessageLiteDescriptor messageLiteDescriptor) {
85+
ImmutableMap<String, FieldLiteDescriptor> fields =
86+
messageLiteDescriptor.getFieldDescriptors().stream()
87+
.collect(toImmutableMap(FieldLiteDescriptor::getFieldName, Function.identity()));
88+
89+
return new ProtoMessageType(
90+
messageLiteDescriptor.getProtoTypeName(),
91+
fields.keySet(),
92+
new FieldResolver(fields),
93+
extensionFieldName -> {
94+
throw new UnsupportedOperationException(
95+
"Proto extensions are not yet supported in MessageLite.");
96+
},
97+
jsonFieldName -> {
98+
throw new UnsupportedOperationException("JSON name is not yet supported in MessageLite.");
99+
});
100+
}
101+
102+
private static class FieldResolver implements StructType.FieldResolver {
103+
private final ImmutableMap<String, FieldLiteDescriptor> fields;
104+
105+
@Override
106+
public Optional<CelType> findField(String fieldName) {
107+
FieldLiteDescriptor fieldDescriptor = fields.get(fieldName);
108+
if (fieldDescriptor == null) {
109+
return Optional.empty();
110+
}
111+
112+
FieldLiteDescriptor.Type fieldType = fieldDescriptor.getProtoFieldType();
113+
switch (fieldDescriptor.getProtoFieldType()) {
114+
default:
115+
return Optional.of(PROTO_TYPE_TO_CEL_TYPE.get(fieldType));
116+
}
117+
}
118+
119+
private FieldResolver(ImmutableMap<String, FieldLiteDescriptor> fields) {
120+
this.fields = fields;
121+
}
122+
}
123+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ java_library(
5757
tags = [
5858
],
5959
deps = [
60+
":values",
6061
"//common/values",
6162
"@maven//:com_google_errorprone_error_prone_annotations",
6263
"@maven//:com_google_guava_guava",
@@ -81,6 +82,7 @@ java_library(
8182
tags = [
8283
],
8384
deps = [
85+
"//common/values",
8486
"//common/values:cel_value_provider",
8587
"@maven//:com_google_errorprone_error_prone_annotations",
8688
"@maven//:com_google_guava_guava",
@@ -94,6 +96,7 @@ cel_android_library(
9496
],
9597
deps = [
9698
"//common/values:cel_value_provider_android",
99+
"//common/values:values_android",
97100
"@maven//:com_google_errorprone_error_prone_annotations",
98101
"@maven_android//:com_google_guava_guava",
99102
],
@@ -286,7 +289,9 @@ java_library(
286289
"//common/annotations",
287290
"//common/internal:cel_lite_descriptor_pool",
288291
"//common/internal:default_lite_descriptor_pool",
292+
"//common/values",
289293
"//common/values:base_proto_cel_value_converter",
294+
"//common/values:cel_value_provider",
290295
"//protobuf:cel_lite_descriptor",
291296
"@maven//:com_google_errorprone_error_prone_annotations",
292297
"@maven//:com_google_guava_guava",
@@ -306,6 +311,8 @@ cel_android_library(
306311
"//common/internal:cel_lite_descriptor_pool_android",
307312
"//common/internal:default_lite_descriptor_pool_android",
308313
"//common/values:base_proto_cel_value_converter_android",
314+
"//common/values:cel_value_provider_android",
315+
"//common/values:values_android",
309316
"//protobuf:cel_lite_descriptor",
310317
"@maven//:com_google_errorprone_error_prone_annotations",
311318
"@maven_android//:com_google_guava_guava",

0 commit comments

Comments
 (0)