Skip to content

Commit af3abfd

Browse files
dmitriplotnikovcopybara-github
authored andcommitted
Add support for macro inclusion/exclusion to CelEnvironmentExporter
PiperOrigin-RevId: 785497910
1 parent 7fe805c commit af3abfd

17 files changed

Lines changed: 835 additions & 16 deletions

File tree

bundle/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,9 @@ java_library(
2424
name = "environment_yaml_parser",
2525
exports = ["//bundle/src/main/java/dev/cel/bundle:environment_yaml_parser"],
2626
)
27+
28+
java_library(
29+
name = "environment_exporter",
30+
visibility = ["//:internal"],
31+
exports = ["//bundle/src/main/java/dev/cel/bundle:environment_exporter"],
32+
)

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,33 @@ java_library(
111111
],
112112
)
113113

114+
java_library(
115+
name = "environment_exporter",
116+
srcs = [
117+
"CelEnvironmentExporter.java",
118+
],
119+
tags = [
120+
],
121+
deps = [
122+
":environment",
123+
"//:auto_value",
124+
"//bundle:cel",
125+
"//checker:standard_decl",
126+
"//common:compiler_common",
127+
"//common:options",
128+
"//common/internal:env_visitor",
129+
"//common/types:cel_proto_types",
130+
"//common/types:cel_types",
131+
"//common/types:type_providers",
132+
"//extensions",
133+
"//extensions:inventory",
134+
"//parser:macro",
135+
"@cel_spec//proto/cel/expr:checked_java_proto",
136+
"@maven//:com_google_errorprone_error_prone_annotations",
137+
"@maven//:com_google_guava_guava",
138+
],
139+
)
140+
114141
java_library(
115142
name = "required_fields_checker",
116143
srcs = [

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public static Builder newBuilder() {
185185
.setVariables(ImmutableSet.of())
186186
.setFunctions(ImmutableSet.of());
187187
}
188-
188+
189189
/** Extends the provided {@link CelCompiler} environment with this configuration. */
190190
public CelCompiler extend(CelCompiler celCompiler, CelOptions celOptions)
191191
throws CelEnvironmentException {
@@ -275,12 +275,12 @@ private void applyStandardLibrarySubset(CelCompilerBuilder compilerBuilder) {
275275
} else if (!librarySubset.includedMacros().isEmpty()) {
276276
compilerBuilder.setStandardMacros(
277277
librarySubset.includedMacros().stream()
278-
.map(CelEnvironment::getStandardMacroOrThrow)
278+
.flatMap(name -> getStandardMacrosOrThrow(name).stream())
279279
.collect(toImmutableSet()));
280280
} else if (!librarySubset.excludedMacros().isEmpty()) {
281281
ImmutableSet<CelStandardMacro> set =
282282
librarySubset.excludedMacros().stream()
283-
.map(CelEnvironment::getStandardMacroOrThrow)
283+
.flatMap(name -> getStandardMacrosOrThrow(name).stream())
284284
.collect(toImmutableSet());
285285
compilerBuilder.setStandardMacros(
286286
CelStandardMacro.STANDARD_MACROS.stream()
@@ -311,13 +311,18 @@ private void applyStandardLibrarySubset(CelCompilerBuilder compilerBuilder) {
311311
}
312312
}
313313

314-
private static CelStandardMacro getStandardMacroOrThrow(String macroName) {
314+
private static ImmutableSet<CelStandardMacro> getStandardMacrosOrThrow(String macroName) {
315+
ImmutableSet.Builder<CelStandardMacro> builder = ImmutableSet.builder();
315316
for (CelStandardMacro macro : CelStandardMacro.STANDARD_MACROS) {
316317
if (macro.getFunction().equals(macroName)) {
317-
return macro;
318+
builder.add(macro);
318319
}
319320
}
320-
throw new IllegalArgumentException("unrecognized standard macro `" + macroName + "'");
321+
ImmutableSet<CelStandardMacro> macros = builder.build();
322+
if (macros.isEmpty()) {
323+
throw new IllegalArgumentException("unrecognized standard macro `" + macroName + "'");
324+
}
325+
return macros;
321326
}
322327

323328
private static CanonicalCelExtension getExtensionOrThrow(String extensionName) {

0 commit comments

Comments
 (0)