diff --git a/bundle/src/main/java/dev/cel/bundle/CelBuilder.java b/bundle/src/main/java/dev/cel/bundle/CelBuilder.java index 3a6a24858..50a696fff 100644 --- a/bundle/src/main/java/dev/cel/bundle/CelBuilder.java +++ b/bundle/src/main/java/dev/cel/bundle/CelBuilder.java @@ -88,6 +88,9 @@ public interface CelBuilder { @Deprecated CelBuilder setContainer(String container); + /** Retrieves the currently configured {@link CelContainer} in the builder. */ + CelContainer container(); + /** * Set the {@link CelContainer} to use as the namespace for resolving CEL expression variables and * functions. diff --git a/bundle/src/main/java/dev/cel/bundle/CelImpl.java b/bundle/src/main/java/dev/cel/bundle/CelImpl.java index a4bcc7f30..8c693d3fc 100644 --- a/bundle/src/main/java/dev/cel/bundle/CelImpl.java +++ b/bundle/src/main/java/dev/cel/bundle/CelImpl.java @@ -195,6 +195,11 @@ public CelBuilder setContainer(String container) { return this; } + @Override + public CelContainer container() { + return compilerBuilder.container(); + } + @Override public CelBuilder setContainer(CelContainer container) { compilerBuilder.setContainer(container); diff --git a/compiler/src/main/java/dev/cel/compiler/CelCompilerBuilder.java b/compiler/src/main/java/dev/cel/compiler/CelCompilerBuilder.java index 436fb5f48..735da069b 100644 --- a/compiler/src/main/java/dev/cel/compiler/CelCompilerBuilder.java +++ b/compiler/src/main/java/dev/cel/compiler/CelCompilerBuilder.java @@ -89,6 +89,9 @@ public interface CelCompilerBuilder { @CanIgnoreReturnValue CelCompilerBuilder setContainer(CelContainer container); + /** Retrieves the currently configured {@link CelContainer} in the builder. */ + CelContainer container(); + /** Add a variable declaration with a given {@code name} and proto based {@link Type}. */ @CanIgnoreReturnValue CelCompilerBuilder addVar(String name, Type type); diff --git a/compiler/src/main/java/dev/cel/compiler/CelCompilerImpl.java b/compiler/src/main/java/dev/cel/compiler/CelCompilerImpl.java index da8a75b9b..ce48fd7ff 100644 --- a/compiler/src/main/java/dev/cel/compiler/CelCompilerImpl.java +++ b/compiler/src/main/java/dev/cel/compiler/CelCompilerImpl.java @@ -170,6 +170,11 @@ public CelCompilerBuilder setContainer(CelContainer container) { return this; } + @Override + public CelContainer container() { + return checkerBuilder.container(); + } + @Override public CelCompilerBuilder addVar(String name, Type type) { return addVar(name, CelProtoTypes.typeToCelType(type)); diff --git a/policy/src/main/java/dev/cel/policy/CelPolicy.java b/policy/src/main/java/dev/cel/policy/CelPolicy.java index 8e4b1c2b8..00c23e7e9 100644 --- a/policy/src/main/java/dev/cel/policy/CelPolicy.java +++ b/policy/src/main/java/dev/cel/policy/CelPolicy.java @@ -23,7 +23,11 @@ import com.google.common.collect.ImmutableSet; import com.google.errorprone.annotations.CanIgnoreReturnValue; import dev.cel.common.formats.ValueString; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -76,13 +80,23 @@ public abstract static class Builder { public abstract Builder setMetadata(ImmutableMap value); - abstract ImmutableList.Builder importsBuilder(); + private final ArrayList importList = new ArrayList<>(); abstract Builder setImports(ImmutableList value); + public List imports() { + return Collections.unmodifiableList(importList); + } + @CanIgnoreReturnValue public Builder addImport(Import value) { - importsBuilder().add(value); + importList.add(value); + return this; + } + + @CanIgnoreReturnValue + public Builder addImports(Collection values) { + importList.addAll(values); return this; } @@ -98,7 +112,12 @@ public Builder putMetadata(Map map) { return this; } - public abstract CelPolicy build(); + abstract CelPolicy autoBuild(); + + public CelPolicy build() { + setImports(ImmutableList.copyOf(importList)); + return autoBuild(); + } } /**