diff --git a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel index 4a5f6dcc7..20d49c476 100644 --- a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel +++ b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel @@ -60,7 +60,6 @@ INTERPRABLE_SOURCES = [ # keep sorted DISPATCHER_SOURCES = [ "DefaultDispatcher.java", - "Dispatcher.java", ] java_library( @@ -125,7 +124,6 @@ java_library( ":resolved_overload_internal", "//:auto_value", "//common:error_codes", - "//common/annotations", "//runtime:function_resolver", "@maven//:com_google_code_findbugs_annotations", "@maven//:com_google_errorprone_error_prone_annotations", @@ -146,7 +144,6 @@ cel_android_library( ":resolved_overload_internal_android", "//:auto_value", "//common:error_codes", - "//common/annotations", "@maven//:com_google_code_findbugs_annotations", "@maven//:com_google_errorprone_error_prone_annotations", "@maven_android//:com_google_guava_guava", diff --git a/runtime/src/main/java/dev/cel/runtime/CelRuntimeLegacyImpl.java b/runtime/src/main/java/dev/cel/runtime/CelRuntimeLegacyImpl.java index 4f58d44db..1b7071505 100644 --- a/runtime/src/main/java/dev/cel/runtime/CelRuntimeLegacyImpl.java +++ b/runtime/src/main/java/dev/cel/runtime/CelRuntimeLegacyImpl.java @@ -287,12 +287,12 @@ public CelRuntimeLegacyImpl build() { functionBindingsBuilder.putAll(customFunctionBindings); - DefaultDispatcher dispatcher = DefaultDispatcher.create(); + DefaultDispatcher.Builder dispatcherBuilder = DefaultDispatcher.newBuilder(); functionBindingsBuilder .buildOrThrow() .forEach( (String overloadId, CelFunctionBinding func) -> - dispatcher.add( + dispatcherBuilder.addOverload( overloadId, func.getArgTypes(), func.isStrict(), func.getDefinition())); RuntimeTypeProvider runtimeTypeProvider; @@ -313,7 +313,7 @@ public CelRuntimeLegacyImpl build() { new DefaultInterpreter( DescriptorTypeResolver.create(), runtimeTypeProvider, - dispatcher.immutableCopy(), + dispatcherBuilder.build(), options); return new CelRuntimeLegacyImpl( diff --git a/runtime/src/main/java/dev/cel/runtime/DefaultDispatcher.java b/runtime/src/main/java/dev/cel/runtime/DefaultDispatcher.java index 6228dd253..2643ddf75 100644 --- a/runtime/src/main/java/dev/cel/runtime/DefaultDispatcher.java +++ b/runtime/src/main/java/dev/cel/runtime/DefaultDispatcher.java @@ -14,41 +14,29 @@ package dev.cel.runtime; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.auto.value.AutoBuilder; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableMap; +import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.Immutable; -import javax.annotation.concurrent.ThreadSafe; -import com.google.errorprone.annotations.concurrent.GuardedBy; import dev.cel.common.CelErrorCode; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -/** - * Default implementation of {@link Dispatcher}. - * - *
Should be final, do not mock; mocking {@link Dispatcher} instead.
- */
-@ThreadSafe
-final class DefaultDispatcher implements Dispatcher {
- public static DefaultDispatcher create() {
- return new DefaultDispatcher();
- }
+/** Default implementation of dispatcher. */
+@Immutable
+final class DefaultDispatcher implements CelFunctionResolver {
- @GuardedBy("this")
- private final Map CEL Library Internals. Do Not Use.
- */
-@ThreadSafe
-@Internal
-interface Dispatcher extends CelFunctionResolver {
-
- /**
- * Returns an {@link ImmutableCopy} from current instance.
- *
- * @see ImmutableCopy
- */
- ImmutableCopy immutableCopy();
-
- /**
- * An {@link Immutable} copy of a {@link Dispatcher}. Currently {@link DefaultDispatcher}
- * implementation implements both {@link Dispatcher} and {@link Registrar} and cannot be annotated
- * as {@link Immutable}.
- *
- * Should consider to provide Registrar.dumpAsDispatcher and Registrar.dumpAsAsyncDispatcher
- * instead of letting DefaultDispatcher or AsyncDispatcher to implement both Registrar and
- * Dispatcher. But it requires a global refactoring.
- */
- @Immutable
- interface ImmutableCopy extends Dispatcher {}
-}
diff --git a/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java b/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java
index aba73aed4..e1415eabd 100644
--- a/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java
+++ b/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java
@@ -176,22 +176,19 @@ public CelLiteRuntime build() {
functionBindingsBuilder.putAll(customFunctionBindings);
- DefaultDispatcher dispatcher = DefaultDispatcher.create();
+ DefaultDispatcher.Builder dispatcherBuilder = DefaultDispatcher.newBuilder();
functionBindingsBuilder
.buildOrThrow()
.forEach(
(String overloadId, CelFunctionBinding func) ->
- dispatcher.add(
- overloadId,
- func.getArgTypes(),
- func.isStrict(),
- (args) -> func.getDefinition().apply(args)));
+ dispatcherBuilder.addOverload(
+ overloadId, func.getArgTypes(), func.isStrict(), func.getDefinition()));
Interpreter interpreter =
new DefaultInterpreter(
TypeResolver.create(),
CelValueRuntimeTypeProvider.newInstance(celValueProvider),
- dispatcher,
+ dispatcherBuilder.build(),
celOptions);
return new LiteRuntimeImpl(
diff --git a/runtime/src/test/java/dev/cel/runtime/DefaultInterpreterTest.java b/runtime/src/test/java/dev/cel/runtime/DefaultInterpreterTest.java
index e9ac6b5a3..b70bffdb6 100644
--- a/runtime/src/test/java/dev/cel/runtime/DefaultInterpreterTest.java
+++ b/runtime/src/test/java/dev/cel/runtime/DefaultInterpreterTest.java
@@ -74,14 +74,15 @@ public Object adapt(String messageName, Object message) {
}
};
CelAbstractSyntaxTree ast = celCompiler.compile("[1].all(x, [2].all(y, error()))").getAst();
- DefaultDispatcher dispatcher = DefaultDispatcher.create();
- dispatcher.add(
+ DefaultDispatcher.Builder dispatcherBuilder = DefaultDispatcher.newBuilder();
+ dispatcherBuilder.addOverload(
"error",
ImmutableList.of(long.class),
/* isStrict= */ true,
(args) -> new IllegalArgumentException("Always throws"));
DefaultInterpreter defaultInterpreter =
- new DefaultInterpreter(new TypeResolver(), emptyProvider, dispatcher, CelOptions.DEFAULT);
+ new DefaultInterpreter(
+ new TypeResolver(), emptyProvider, dispatcherBuilder.build(), CelOptions.DEFAULT);
DefaultInterpretable interpretable =
(DefaultInterpretable) defaultInterpreter.createInterpretable(ast);