diff --git a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel index 1fffa5f77..77dfc4273 100644 --- a/runtime/src/main/java/dev/cel/runtime/BUILD.bazel +++ b/runtime/src/main/java/dev/cel/runtime/BUILD.bazel @@ -629,6 +629,7 @@ java_library( "//runtime/standard:not_equals", "//runtime/standard:optional", "//runtime/standard:size", + "//runtime/standard:standard_function", "//runtime/standard:starts_with", "//runtime/standard:string", "//runtime/standard:subtract", @@ -690,6 +691,7 @@ cel_android_library( "//runtime/standard:not_equals_android", "//runtime/standard:optional_android", "//runtime/standard:size_android", + "//runtime/standard:standard_function_android", "//runtime/standard:starts_with_android", "//runtime/standard:string_android", "//runtime/standard:subtract_android", @@ -827,11 +829,11 @@ java_library( ":evaluation_exception", ":function_binding", ":function_resolver", - ":standard_functions", "//:auto_value", "//common:cel_ast", "//common:options", "//common/values:cel_value_provider", + "//runtime/standard:standard_function", "@maven//:com_google_code_findbugs_annotations", "@maven//:com_google_errorprone_error_prone_annotations", "@maven//:com_google_guava_guava", @@ -862,6 +864,7 @@ java_library( "//common:cel_ast", "//common:options", "//common/values:cel_value_provider", + "//runtime/standard:standard_function", "@maven//:com_google_code_findbugs_annotations", "@maven//:com_google_errorprone_error_prone_annotations", "@maven//:com_google_guava_guava", @@ -892,6 +895,7 @@ cel_android_library( "//common:cel_ast_android", "//common:options", "//common/values:cel_value_provider_android", + "//runtime/standard:standard_function_android", "@maven//:com_google_code_findbugs_annotations", "@maven//:com_google_errorprone_error_prone_annotations", "@maven//:com_google_guava_guava", @@ -1087,6 +1091,7 @@ cel_android_library( "//common:cel_ast_android", "//common:options", "//common/values:cel_value_provider_android", + "//runtime/standard:standard_function_android", "@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/CelLiteRuntimeBuilder.java b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeBuilder.java index bf63603af..48b51274d 100644 --- a/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeBuilder.java +++ b/runtime/src/main/java/dev/cel/runtime/CelLiteRuntimeBuilder.java @@ -18,6 +18,7 @@ import com.google.errorprone.annotations.CheckReturnValue; import dev.cel.common.CelOptions; import dev.cel.common.values.CelValueProvider; +import dev.cel.runtime.standard.CelStandardFunction; /** Interface for building an instance of {@link CelLiteRuntime} */ public interface CelLiteRuntimeBuilder { @@ -27,11 +28,16 @@ public interface CelLiteRuntimeBuilder { CelLiteRuntimeBuilder setOptions(CelOptions options); /** - * Override the standard functions for the runtime. This can be used to subset the standard - * environment to only expose the desired function overloads to the runtime. + * Set the standard functions to enable in the runtime. These can be found in {@code + * dev.cel.runtime.standard} package. By default, lite runtime does not include any standard + * functions on its own. */ @CanIgnoreReturnValue - CelLiteRuntimeBuilder setStandardFunctions(CelStandardFunctions standardFunctions); + CelLiteRuntimeBuilder setStandardFunctions(CelStandardFunction... standardFunctions); + + @CanIgnoreReturnValue + CelLiteRuntimeBuilder setStandardFunctions( + Iterable standardFunctions); /** Add one or more {@link CelFunctionBinding} objects to the CEL runtime. */ @CanIgnoreReturnValue diff --git a/runtime/src/main/java/dev/cel/runtime/CelStandardFunctions.java b/runtime/src/main/java/dev/cel/runtime/CelStandardFunctions.java index 00e418b52..111f32eae 100644 --- a/runtime/src/main/java/dev/cel/runtime/CelStandardFunctions.java +++ b/runtime/src/main/java/dev/cel/runtime/CelStandardFunctions.java @@ -32,45 +32,86 @@ import dev.cel.runtime.CelStandardFunctions.StandardFunction.Overload.Relation; import dev.cel.runtime.CelStandardFunctions.StandardFunction.Overload.Size; import dev.cel.runtime.CelStandardFunctions.StandardFunction.Overload.StringMatchers; +import dev.cel.runtime.standard.AddOperator; import dev.cel.runtime.standard.AddOperator.AddOverload; +import dev.cel.runtime.standard.BoolFunction; import dev.cel.runtime.standard.BoolFunction.BoolOverload; +import dev.cel.runtime.standard.BytesFunction; import dev.cel.runtime.standard.BytesFunction.BytesOverload; +import dev.cel.runtime.standard.CelStandardFunction; +import dev.cel.runtime.standard.ContainsFunction; import dev.cel.runtime.standard.ContainsFunction.ContainsOverload; +import dev.cel.runtime.standard.DivideOperator; import dev.cel.runtime.standard.DivideOperator.DivideOverload; +import dev.cel.runtime.standard.DoubleFunction; import dev.cel.runtime.standard.DoubleFunction.DoubleOverload; +import dev.cel.runtime.standard.DurationFunction; import dev.cel.runtime.standard.DurationFunction.DurationOverload; +import dev.cel.runtime.standard.DynFunction; import dev.cel.runtime.standard.DynFunction.DynOverload; +import dev.cel.runtime.standard.EndsWithFunction; import dev.cel.runtime.standard.EndsWithFunction.EndsWithOverload; +import dev.cel.runtime.standard.EqualsOperator; import dev.cel.runtime.standard.EqualsOperator.EqualsOverload; +import dev.cel.runtime.standard.GetDateFunction; import dev.cel.runtime.standard.GetDateFunction.GetDateOverload; +import dev.cel.runtime.standard.GetDayOfMonthFunction; import dev.cel.runtime.standard.GetDayOfMonthFunction.GetDayOfMonthOverload; +import dev.cel.runtime.standard.GetDayOfWeekFunction; import dev.cel.runtime.standard.GetDayOfWeekFunction.GetDayOfWeekOverload; +import dev.cel.runtime.standard.GetDayOfYearFunction; import dev.cel.runtime.standard.GetDayOfYearFunction.GetDayOfYearOverload; +import dev.cel.runtime.standard.GetFullYearFunction; import dev.cel.runtime.standard.GetFullYearFunction.GetFullYearOverload; +import dev.cel.runtime.standard.GetHoursFunction; import dev.cel.runtime.standard.GetHoursFunction.GetHoursOverload; +import dev.cel.runtime.standard.GetMillisecondsFunction; import dev.cel.runtime.standard.GetMillisecondsFunction.GetMillisecondsOverload; +import dev.cel.runtime.standard.GetMinutesFunction; import dev.cel.runtime.standard.GetMinutesFunction.GetMinutesOverload; +import dev.cel.runtime.standard.GetMonthFunction; import dev.cel.runtime.standard.GetMonthFunction.GetMonthOverload; +import dev.cel.runtime.standard.GetSecondsFunction; import dev.cel.runtime.standard.GetSecondsFunction.GetSecondsOverload; +import dev.cel.runtime.standard.GreaterEqualsOperator; import dev.cel.runtime.standard.GreaterEqualsOperator.GreaterEqualsOverload; +import dev.cel.runtime.standard.GreaterOperator; import dev.cel.runtime.standard.GreaterOperator.GreaterOverload; +import dev.cel.runtime.standard.InOperator; import dev.cel.runtime.standard.InOperator.InOverload; +import dev.cel.runtime.standard.IndexOperator; import dev.cel.runtime.standard.IndexOperator.IndexOverload; +import dev.cel.runtime.standard.IntFunction; import dev.cel.runtime.standard.IntFunction.IntOverload; +import dev.cel.runtime.standard.LessEqualsOperator; import dev.cel.runtime.standard.LessEqualsOperator.LessEqualsOverload; +import dev.cel.runtime.standard.LessOperator; import dev.cel.runtime.standard.LessOperator.LessOverload; +import dev.cel.runtime.standard.LogicalNotOperator; import dev.cel.runtime.standard.LogicalNotOperator.LogicalNotOverload; +import dev.cel.runtime.standard.MatchesFunction; import dev.cel.runtime.standard.MatchesFunction.MatchesOverload; +import dev.cel.runtime.standard.ModuloOperator; import dev.cel.runtime.standard.ModuloOperator.ModuloOverload; +import dev.cel.runtime.standard.MultiplyOperator; import dev.cel.runtime.standard.MultiplyOperator.MultiplyOverload; +import dev.cel.runtime.standard.NegateOperator; import dev.cel.runtime.standard.NegateOperator.NegateOverload; +import dev.cel.runtime.standard.NotEqualsOperator; import dev.cel.runtime.standard.NotEqualsOperator.NotEqualsOverload; +import dev.cel.runtime.standard.OptionalFunction; import dev.cel.runtime.standard.OptionalFunction.OptionalOverload; +import dev.cel.runtime.standard.SizeFunction; import dev.cel.runtime.standard.SizeFunction.SizeOverload; +import dev.cel.runtime.standard.StartsWithFunction; import dev.cel.runtime.standard.StartsWithFunction.StartsWithOverload; +import dev.cel.runtime.standard.StringFunction; import dev.cel.runtime.standard.StringFunction.StringOverload; +import dev.cel.runtime.standard.SubtractOperator; import dev.cel.runtime.standard.SubtractOperator.SubtractOverload; +import dev.cel.runtime.standard.TimestampFunction; import dev.cel.runtime.standard.TimestampFunction.TimestampOverload; +import dev.cel.runtime.standard.UintFunction; import dev.cel.runtime.standard.UintFunction.UintOverload; /** Runtime function bindings for the standard functions in CEL. */ @@ -79,6 +120,49 @@ public final class CelStandardFunctions { private final ImmutableSet standardOverloads; + public static final ImmutableSet ALL_STANDARD_FUNCTIONS = + ImmutableSet.of( + AddOperator.create(), + BoolFunction.create(), + BytesFunction.create(), + ContainsFunction.create(), + DivideOperator.create(), + DoubleFunction.create(), + DurationFunction.create(), + DynFunction.create(), + EndsWithFunction.create(), + EqualsOperator.create(), + GetDateFunction.create(), + GetDayOfMonthFunction.create(), + GetDayOfWeekFunction.create(), + GetDayOfYearFunction.create(), + GetFullYearFunction.create(), + GetHoursFunction.create(), + GetMillisecondsFunction.create(), + GetMinutesFunction.create(), + GetMonthFunction.create(), + GetSecondsFunction.create(), + GreaterEqualsOperator.create(), + GreaterOperator.create(), + IndexOperator.create(), + InOperator.create(), + IntFunction.create(), + LessEqualsOperator.create(), + LessOperator.create(), + LogicalNotOperator.create(), + MatchesFunction.create(), + ModuloOperator.create(), + MultiplyOperator.create(), + NegateOperator.create(), + NotEqualsOperator.create(), + OptionalFunction.create(), + SizeFunction.create(), + StartsWithFunction.create(), + StringFunction.create(), + SubtractOperator.create(), + TimestampFunction.create(), + UintFunction.create()); + /** * Enumeration of Standard Function bindings. * diff --git a/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java b/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java index aa742e95f..6836b2254 100644 --- a/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java +++ b/runtime/src/main/java/dev/cel/runtime/LiteRuntimeImpl.java @@ -25,6 +25,7 @@ import dev.cel.common.CelAbstractSyntaxTree; import dev.cel.common.CelOptions; import dev.cel.common.values.CelValueProvider; +import dev.cel.runtime.standard.CelStandardFunction; import java.util.Arrays; import java.util.HashMap; import java.util.Optional; @@ -34,7 +35,7 @@ final class LiteRuntimeImpl implements CelLiteRuntime { private final Interpreter interpreter; private final CelOptions celOptions; private final ImmutableList customFunctionBindings; - private final CelStandardFunctions celStandardFunctions; + private final ImmutableSet celStandardFunctions; private final CelValueProvider celValueProvider; // This does not affect the evaluation behavior in any manner. @@ -69,7 +70,7 @@ static final class Builder implements CelLiteRuntimeBuilder { @VisibleForTesting CelOptions celOptions; @VisibleForTesting final HashMap customFunctionBindings; @VisibleForTesting final ImmutableSet.Builder runtimeLibrariesBuilder; - @VisibleForTesting CelStandardFunctions celStandardFunctions; + @VisibleForTesting final ImmutableSet.Builder standardFunctionBuilder; @VisibleForTesting CelValueProvider celValueProvider; @Override @@ -79,8 +80,14 @@ public CelLiteRuntimeBuilder setOptions(CelOptions celOptions) { } @Override - public CelLiteRuntimeBuilder setStandardFunctions(CelStandardFunctions standardFunctions) { - this.celStandardFunctions = standardFunctions; + public CelLiteRuntimeBuilder setStandardFunctions(CelStandardFunction... standardFunctions) { + return setStandardFunctions(Arrays.asList(standardFunctions)); + } + + @Override + public CelLiteRuntimeBuilder setStandardFunctions( + Iterable standardFunctions) { + standardFunctionBuilder.addAll(standardFunctions); return this; } @@ -153,13 +160,17 @@ public CelLiteRuntime build() { ImmutableMap.Builder functionBindingsBuilder = ImmutableMap.builder(); - if (celStandardFunctions != null) { + + ImmutableSet standardFunctions = standardFunctionBuilder.build(); + if (!standardFunctions.isEmpty()) { RuntimeHelpers runtimeHelpers = RuntimeHelpers.create(); RuntimeEquality runtimeEquality = RuntimeEquality.create(runtimeHelpers, celOptions); - ImmutableSet standardFunctionBinding = - celStandardFunctions.newFunctionBindings(runtimeEquality, celOptions); - for (CelFunctionBinding func : standardFunctionBinding) { - functionBindingsBuilder.put(func.getOverloadId(), func); + for (CelStandardFunction standardFunction : standardFunctions) { + ImmutableSet standardFunctionBinding = + standardFunction.newFunctionBindings(celOptions, runtimeEquality); + for (CelFunctionBinding func : standardFunctionBinding) { + functionBindingsBuilder.put(func.getOverloadId(), func); + } } } @@ -184,7 +195,7 @@ public CelLiteRuntime build() { interpreter, celOptions, customFunctionBindings.values(), - celStandardFunctions, + standardFunctions, runtimeLibs, celValueProvider); } @@ -193,6 +204,7 @@ private Builder() { this.celOptions = CelOptions.current().enableCelValue(true).build(); this.celValueProvider = (structType, fields) -> Optional.empty(); this.customFunctionBindings = new HashMap<>(); + this.standardFunctionBuilder = ImmutableSet.builder(); this.runtimeLibrariesBuilder = ImmutableSet.builder(); } } @@ -205,7 +217,7 @@ private LiteRuntimeImpl( Interpreter interpreter, CelOptions celOptions, Iterable customFunctionBindings, - CelStandardFunctions celStandardFunctions, + ImmutableSet celStandardFunctions, ImmutableSet runtimeLibraries, CelValueProvider celValueProvider) { this.interpreter = interpreter; diff --git a/runtime/src/main/java/dev/cel/runtime/standard/AddOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/AddOperator.java index c3d08d379..813d19522 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/AddOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/AddOperator.java @@ -32,6 +32,11 @@ /** Standard function for the addition (+) operator. */ public final class AddOperator extends CelStandardFunction { + private static final AddOperator ALL_OVERLOADS = create(AddOverload.values()); + + public static AddOperator create() { + return ALL_OVERLOADS; + } public static AddOperator create(AddOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/BUILD.bazel b/runtime/src/main/java/dev/cel/runtime/standard/BUILD.bazel index f2b7ef4c1..75bb28903 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/BUILD.bazel +++ b/runtime/src/main/java/dev/cel/runtime/standard/BUILD.bazel @@ -19,6 +19,7 @@ java_library( "//common:options", "//runtime:function_binding", "//runtime:runtime_equality", + "@maven//:com_google_errorprone_error_prone_annotations", "@maven//:com_google_guava_guava", ], ) @@ -33,6 +34,7 @@ cel_android_library( "//common:options", "//runtime:function_binding_android", "//runtime:runtime_equality_android", + "@maven//:com_google_errorprone_error_prone_annotations", "@maven_android//:com_google_guava_guava", ], ) diff --git a/runtime/src/main/java/dev/cel/runtime/standard/BoolFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/BoolFunction.java index 7acd5030c..519755d18 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/BoolFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/BoolFunction.java @@ -25,6 +25,11 @@ /** Standard function for {@code bool} conversion function. */ public final class BoolFunction extends CelStandardFunction { + private static final BoolFunction ALL_OVERLOADS = create(BoolOverload.values()); + + public static BoolFunction create() { + return ALL_OVERLOADS; + } public static BoolFunction create(BoolFunction.BoolOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/BytesFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/BytesFunction.java index b83f8d0b7..64ebe3e75 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/BytesFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/BytesFunction.java @@ -23,6 +23,11 @@ /** Standard function for {@code bytes} conversion function. */ public final class BytesFunction extends CelStandardFunction { + private static final BytesFunction ALL_OVERLOADS = create(BytesOverload.values()); + + public static BytesFunction create() { + return ALL_OVERLOADS; + } public static BytesFunction create(BytesFunction.BytesOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/CelStandardFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/CelStandardFunction.java index 6b576bcf7..bde6fa6b5 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/CelStandardFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/CelStandardFunction.java @@ -17,6 +17,7 @@ import static com.google.common.base.Preconditions.checkState; import com.google.common.collect.ImmutableSet; +import com.google.errorprone.annotations.Immutable; import dev.cel.common.CelOptions; import dev.cel.runtime.CelFunctionBinding; import dev.cel.runtime.RuntimeEquality; @@ -25,6 +26,7 @@ * An abstract class that describes a CEL standard function. An implementation should provide a set * of overloads for the standard function */ +@Immutable public abstract class CelStandardFunction { private final ImmutableSet overloads; diff --git a/runtime/src/main/java/dev/cel/runtime/standard/CelStandardOverload.java b/runtime/src/main/java/dev/cel/runtime/standard/CelStandardOverload.java index 70435e493..25555c13e 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/CelStandardOverload.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/CelStandardOverload.java @@ -24,6 +24,7 @@ * implementation should produce a concrete {@link CelFunctionBinding} for the standard function's * overload. */ +@Immutable interface CelStandardOverload { CelFunctionBinding newFunctionBinding(CelOptions celOptions, RuntimeEquality runtimeEquality); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/ContainsFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/ContainsFunction.java index 507c82d01..fb4aa37f1 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/ContainsFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/ContainsFunction.java @@ -22,6 +22,11 @@ /** Standard function for {@code contains}. */ public final class ContainsFunction extends CelStandardFunction { + private static final ContainsFunction ALL_OVERLOADS = create(ContainsOverload.values()); + + public static ContainsFunction create() { + return ALL_OVERLOADS; + } public static ContainsFunction create(ContainsFunction.ContainsOverload... overloads) { return create(Arrays.asList(overloads)); @@ -40,7 +45,6 @@ public enum ContainsOverload implements CelStandardOverload { ; private final FunctionBindingCreator bindingCreator; - ; @Override public CelFunctionBinding newFunctionBinding( diff --git a/runtime/src/main/java/dev/cel/runtime/standard/DivideOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/DivideOperator.java index ddcb90c89..23556d0f1 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/DivideOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/DivideOperator.java @@ -27,6 +27,11 @@ /** Standard function for the division (/) operator. */ public final class DivideOperator extends CelStandardFunction { + private static final DivideOperator ALL_OVERLOADS = create(DivideOverload.values()); + + public static DivideOperator create() { + return ALL_OVERLOADS; + } public static DivideOperator create(DivideOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/DoubleFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/DoubleFunction.java index 0b946d16d..1569a0c0b 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/DoubleFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/DoubleFunction.java @@ -25,6 +25,11 @@ /** Standard function for {@code double} conversion function. */ public final class DoubleFunction extends CelStandardFunction { + private static final DoubleFunction ALL_OVERLOADS = create(DoubleOverload.values()); + + public static DoubleFunction create() { + return ALL_OVERLOADS; + } public static DoubleFunction create(DoubleFunction.DoubleOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/DurationFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/DurationFunction.java index a2a264c66..d54e2999b 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/DurationFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/DurationFunction.java @@ -26,6 +26,11 @@ /** Standard function for {@code duration} conversion function. */ public final class DurationFunction extends CelStandardFunction { + private static final DurationFunction ALL_OVERLOADS = create(DurationOverload.values()); + + public static DurationFunction create() { + return ALL_OVERLOADS; + } public static DurationFunction create(DurationFunction.DurationOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/DynFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/DynFunction.java index 3097b3176..bfaada85c 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/DynFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/DynFunction.java @@ -23,6 +23,12 @@ /** Standard function for {@code dyn} conversion function. */ public final class DynFunction extends CelStandardFunction { + private static final DynFunction ALL_OVERLOADS = create(DynOverload.values()); + + public static DynFunction create() { + return ALL_OVERLOADS; + } + public static DynFunction create(DynFunction.DynOverload... overloads) { return create(Arrays.asList(overloads)); } diff --git a/runtime/src/main/java/dev/cel/runtime/standard/EndsWithFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/EndsWithFunction.java index 4b583aa15..048807a10 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/EndsWithFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/EndsWithFunction.java @@ -22,6 +22,11 @@ /** Standard function for {@code endsWith}. */ public final class EndsWithFunction extends CelStandardFunction { + private static final EndsWithFunction ALL_OVERLOADS = create(EndsWithOverload.values()); + + public static EndsWithFunction create() { + return ALL_OVERLOADS; + } public static EndsWithFunction create(EndsWithFunction.EndsWithOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/EqualsOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/EqualsOperator.java index d19c0d417..192ffd749 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/EqualsOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/EqualsOperator.java @@ -22,6 +22,11 @@ /** Standard function for the equals (=) operator. */ public final class EqualsOperator extends CelStandardFunction { + private static final EqualsOperator ALL_OVERLOADS = create(EqualsOverload.values()); + + public static EqualsOperator create() { + return ALL_OVERLOADS; + } public static EqualsOperator create(EqualsOperator.EqualsOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetDateFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetDateFunction.java index 7f3283b88..bd48ec7da 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetDateFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetDateFunction.java @@ -26,6 +26,11 @@ /** Standard function for {@code getDate}. */ public final class GetDateFunction extends CelStandardFunction { + private static final GetDateFunction ALL_OVERLOADS = create(GetDateOverload.values()); + + public static GetDateFunction create() { + return ALL_OVERLOADS; + } public static GetDateFunction create(GetDateFunction.GetDateOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfMonthFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfMonthFunction.java index 3fc25b958..171353c04 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfMonthFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfMonthFunction.java @@ -26,6 +26,11 @@ /** Standard function for {@code getDayOfMonth}. */ public final class GetDayOfMonthFunction extends CelStandardFunction { + private static final GetDayOfMonthFunction ALL_OVERLOADS = create(GetDayOfMonthOverload.values()); + + public static GetDayOfMonthFunction create() { + return ALL_OVERLOADS; + } public static GetDayOfMonthFunction create( GetDayOfMonthFunction.GetDayOfMonthOverload... overloads) { diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfWeekFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfWeekFunction.java index ab79f854f..92ef90e79 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfWeekFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfWeekFunction.java @@ -27,6 +27,11 @@ /** Standard function for {@code getDayOfWeek}. */ public final class GetDayOfWeekFunction extends CelStandardFunction { + private static final GetDayOfWeekFunction ALL_OVERLOADS = create(GetDayOfWeekOverload.values()); + + public static GetDayOfWeekFunction create() { + return ALL_OVERLOADS; + } public static GetDayOfWeekFunction create( GetDayOfWeekFunction.GetDayOfWeekOverload... overloads) { diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfYearFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfYearFunction.java index dde45f0e1..8c4d90e64 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfYearFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetDayOfYearFunction.java @@ -26,6 +26,11 @@ /** Standard function for {@code getDayOfYear}. */ public final class GetDayOfYearFunction extends CelStandardFunction { + private static final GetDayOfYearFunction ALL_OVERLOADS = create(GetDayOfYearOverload.values()); + + public static GetDayOfYearFunction create() { + return ALL_OVERLOADS; + } public static GetDayOfYearFunction create( GetDayOfYearFunction.GetDayOfYearOverload... overloads) { diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetFullYearFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetFullYearFunction.java index 79a8b006a..61fe189cb 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetFullYearFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetFullYearFunction.java @@ -26,6 +26,11 @@ /** Standard function for {@code getFullYear}. */ public final class GetFullYearFunction extends CelStandardFunction { + private static final GetFullYearFunction ALL_OVERLOADS = create(GetFullYearOverload.values()); + + public static GetFullYearFunction create() { + return ALL_OVERLOADS; + } public static GetFullYearFunction create(GetFullYearFunction.GetFullYearOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetHoursFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetHoursFunction.java index ebb3096b1..ee36bfbb0 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetHoursFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetHoursFunction.java @@ -28,6 +28,11 @@ /** Standard function for {@code getHours}. */ public final class GetHoursFunction extends CelStandardFunction { + private static final GetHoursFunction ALL_OVERLOADS = create(GetHoursOverload.values()); + + public static GetHoursFunction create() { + return ALL_OVERLOADS; + } public static GetHoursFunction create(GetHoursFunction.GetHoursOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetMillisecondsFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetMillisecondsFunction.java index 06cb785c6..369cd9ea2 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetMillisecondsFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetMillisecondsFunction.java @@ -28,6 +28,12 @@ /** Standard function for {@code getMilliseconds}. */ public final class GetMillisecondsFunction extends CelStandardFunction { + private static final GetMillisecondsFunction ALL_OVERLOADS = + create(GetMillisecondsOverload.values()); + + public static GetMillisecondsFunction create() { + return ALL_OVERLOADS; + } public static GetMillisecondsFunction create( GetMillisecondsFunction.GetMillisecondsOverload... overloads) { diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetMinutesFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetMinutesFunction.java index c933fbb1e..24c285c46 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetMinutesFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetMinutesFunction.java @@ -28,6 +28,11 @@ /** Standard function for {@code getMinutes}. */ public final class GetMinutesFunction extends CelStandardFunction { + private static final GetMinutesFunction ALL_OVERLOADS = create(GetMinutesOverload.values()); + + public static GetMinutesFunction create() { + return ALL_OVERLOADS; + } public static GetMinutesFunction create(GetMinutesFunction.GetMinutesOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetMonthFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetMonthFunction.java index d606e0cf3..34a33815d 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetMonthFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetMonthFunction.java @@ -26,6 +26,11 @@ /** Standard function runtime definition for {@code getMonth}. */ public final class GetMonthFunction extends CelStandardFunction { + private static final GetMonthFunction ALL_OVERLOADS = create(GetMonthOverload.values()); + + public static GetMonthFunction create() { + return ALL_OVERLOADS; + } public static GetMonthFunction create(GetMonthFunction.GetMonthOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GetSecondsFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/GetSecondsFunction.java index 07914384b..e40fc62c5 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GetSecondsFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GetSecondsFunction.java @@ -29,6 +29,12 @@ /** Standard function for {@code getSeconds}. */ public final class GetSecondsFunction extends CelStandardFunction { + private static final GetSecondsFunction ALL_OVERLOADS = create(GetSecondsOverload.values()); + + public static GetSecondsFunction create() { + return ALL_OVERLOADS; + } + public static GetSecondsFunction create(GetSecondsFunction.GetSecondsOverload... overloads) { return create(Arrays.asList(overloads)); } diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GreaterEqualsOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/GreaterEqualsOperator.java index 8b6a4bb44..6cca22da3 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GreaterEqualsOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GreaterEqualsOperator.java @@ -29,6 +29,11 @@ /** Standard function for the greater equals (>=) operator. */ public final class GreaterEqualsOperator extends CelStandardFunction { + private static final GreaterEqualsOperator ALL_OVERLOADS = create(GreaterEqualsOverload.values()); + + public static GreaterEqualsOperator create() { + return ALL_OVERLOADS; + } public static GreaterEqualsOperator create( GreaterEqualsOperator.GreaterEqualsOverload... overloads) { diff --git a/runtime/src/main/java/dev/cel/runtime/standard/GreaterOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/GreaterOperator.java index 2e117488f..8b051ce81 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/GreaterOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/GreaterOperator.java @@ -29,6 +29,11 @@ /** Standard function for the greater (>) operator. */ public final class GreaterOperator extends CelStandardFunction { + private static final GreaterOperator ALL_OVERLOADS = create(GreaterOverload.values()); + + public static GreaterOperator create() { + return ALL_OVERLOADS; + } public static GreaterOperator create(GreaterOperator.GreaterOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/InOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/InOperator.java index 74f961c28..9b4e3986c 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/InOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/InOperator.java @@ -25,6 +25,11 @@ /** Standard function for the ('in') operator. */ @SuppressWarnings({"unchecked", "rawtypes"}) public final class InOperator extends CelStandardFunction { + private static final InOperator ALL_OVERLOADS = create(InOverload.values()); + + public static InOperator create() { + return ALL_OVERLOADS; + } public static InOperator create(InOperator.InOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/IndexOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/IndexOperator.java index 6fd71b2f5..f94fd2807 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/IndexOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/IndexOperator.java @@ -25,6 +25,11 @@ /** Standard function for the indexing ({@code list[0] or map['foo']}) operator */ public final class IndexOperator extends CelStandardFunction { + private static final IndexOperator ALL_OVERLOADS = create(IndexOverload.values()); + + public static IndexOperator create() { + return ALL_OVERLOADS; + } public static IndexOperator create(IndexOperator.IndexOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/IntFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/IntFunction.java index f477b148b..b29ca37a6 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/IntFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/IntFunction.java @@ -28,6 +28,11 @@ /** Standard function for {@code int} conversion function. */ public final class IntFunction extends CelStandardFunction { + private static final IntFunction ALL_OVERLOADS = create(IntOverload.values()); + + public static IntFunction create() { + return ALL_OVERLOADS; + } public static IntFunction create(IntFunction.IntOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/LessEqualsOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/LessEqualsOperator.java index ea24ed2cd..d695cfafa 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/LessEqualsOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/LessEqualsOperator.java @@ -29,6 +29,11 @@ /** Standard function for the less equals (<=) operator. */ public final class LessEqualsOperator extends CelStandardFunction { + private static final LessEqualsOperator ALL_OVERLOADS = create(LessEqualsOverload.values()); + + public static LessEqualsOperator create() { + return ALL_OVERLOADS; + } public static LessEqualsOperator create(LessEqualsOperator.LessEqualsOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/LessOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/LessOperator.java index 914976b59..c96f3ec7a 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/LessOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/LessOperator.java @@ -29,6 +29,11 @@ /** Standard function for the less (<) operator. */ public final class LessOperator extends CelStandardFunction { + private static final LessOperator ALL_OVERLOADS = create(LessOverload.values()); + + public static LessOperator create() { + return ALL_OVERLOADS; + } public static LessOperator create(LessOperator.LessOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/LogicalNotOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/LogicalNotOperator.java index 05ed1c967..c11539a81 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/LogicalNotOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/LogicalNotOperator.java @@ -22,6 +22,11 @@ /** Standard function for the logical not (!=) operator. */ public final class LogicalNotOperator extends CelStandardFunction { + private static final LogicalNotOperator ALL_OVERLOADS = create(LogicalNotOverload.values()); + + public static LogicalNotOperator create() { + return ALL_OVERLOADS; + } public static LogicalNotOperator create(LogicalNotOperator.LogicalNotOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/MatchesFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/MatchesFunction.java index 6f3ac18f1..1b0891b1a 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/MatchesFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/MatchesFunction.java @@ -25,6 +25,11 @@ /** Standard function for {@code matches}. */ public final class MatchesFunction extends CelStandardFunction { + private static final MatchesFunction ALL_OVERLOADS = create(MatchesOverload.values()); + + public static MatchesFunction create() { + return ALL_OVERLOADS; + } public static MatchesFunction create(MatchesFunction.MatchesOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/ModuloOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/ModuloOperator.java index 8a19c7f5b..716db43b7 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/ModuloOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/ModuloOperator.java @@ -27,6 +27,11 @@ /** Standard function for the modulus (%) operator. */ public final class ModuloOperator extends CelStandardFunction { + private static final ModuloOperator ALL_OVERLOADS = create(ModuloOverload.values()); + + public static ModuloOperator create() { + return ALL_OVERLOADS; + } public static ModuloOperator create(ModuloOperator.ModuloOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/MultiplyOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/MultiplyOperator.java index 9e2f704dc..46472fdd6 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/MultiplyOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/MultiplyOperator.java @@ -27,6 +27,11 @@ /** Standard function for the multiplication (*) operator. */ public final class MultiplyOperator extends CelStandardFunction { + private static final MultiplyOperator ALL_OVERLOADS = create(MultiplyOverload.values()); + + public static MultiplyOperator create() { + return ALL_OVERLOADS; + } public static MultiplyOperator create(MultiplyOperator.MultiplyOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/NegateOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/NegateOperator.java index 4fedfbf1f..dd30c557e 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/NegateOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/NegateOperator.java @@ -26,6 +26,11 @@ /** Standard function for the negate (-) operator. */ public final class NegateOperator extends CelStandardFunction { + private static final NegateOperator ALL_OVERLOADS = create(NegateOverload.values()); + + public static NegateOperator create() { + return ALL_OVERLOADS; + } public static NegateOperator create(NegateOperator.NegateOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/NotEqualsOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/NotEqualsOperator.java index 92c32cc51..886047e98 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/NotEqualsOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/NotEqualsOperator.java @@ -22,6 +22,11 @@ /** Standard function for the not equals (!=) operator. */ public final class NotEqualsOperator extends CelStandardFunction { + private static final NotEqualsOperator ALL_OVERLOADS = create(NotEqualsOverload.values()); + + public static NotEqualsOperator create() { + return ALL_OVERLOADS; + } public static NotEqualsOperator create(NotEqualsOperator.NotEqualsOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/OptionalFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/OptionalFunction.java index fea415c35..64f05801e 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/OptionalFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/OptionalFunction.java @@ -31,6 +31,11 @@ *

TODO: Move into CelOptionalLibrary */ public final class OptionalFunction extends CelStandardFunction { + private static final OptionalFunction ALL_OVERLOADS = create(OptionalOverload.values()); + + public static OptionalFunction create() { + return ALL_OVERLOADS; + } public static OptionalFunction create(OptionalFunction.OptionalOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/SizeFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/SizeFunction.java index 7080a7066..b31f8aa3b 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/SizeFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/SizeFunction.java @@ -25,6 +25,11 @@ /** Standard function for {@code size}. */ public final class SizeFunction extends CelStandardFunction { + private static final SizeFunction ALL_OVERLOADS = create(SizeOverload.values()); + + public static SizeFunction create() { + return ALL_OVERLOADS; + } public static SizeFunction create(SizeFunction.SizeOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/StartsWithFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/StartsWithFunction.java index 9dfeb742f..3a73a9f35 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/StartsWithFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/StartsWithFunction.java @@ -22,6 +22,11 @@ /** Standard function for {@code startsWith}. */ public final class StartsWithFunction extends CelStandardFunction { + private static final StartsWithFunction ALL_OVERLOADS = create(StartsWithOverload.values()); + + public static StartsWithFunction create() { + return ALL_OVERLOADS; + } public static StartsWithFunction create(StartsWithFunction.StartsWithOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/StringFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/StringFunction.java index 35c02ca15..b7df9bd10 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/StringFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/StringFunction.java @@ -30,6 +30,11 @@ /** Standard function for {@code string} conversion function. */ public final class StringFunction extends CelStandardFunction { + private static final StringFunction ALL_OVERLOADS = create(StringOverload.values()); + + public static StringFunction create() { + return ALL_OVERLOADS; + } public static StringFunction create(StringFunction.StringOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/SubtractOperator.java b/runtime/src/main/java/dev/cel/runtime/standard/SubtractOperator.java index 6ce9228db..695650390 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/SubtractOperator.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/SubtractOperator.java @@ -30,6 +30,11 @@ /** Standard function for the subtraction (-) operator. */ public final class SubtractOperator extends CelStandardFunction { + private static final SubtractOperator ALL_OVERLOADS = create(SubtractOverload.values()); + + public static SubtractOperator create() { + return ALL_OVERLOADS; + } public static SubtractOperator create(SubtractOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/TimestampFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/TimestampFunction.java index 5f24f2f4b..9b64b78cb 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/TimestampFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/TimestampFunction.java @@ -27,6 +27,11 @@ /** Standard function for {@code timestamp} conversion function. */ public final class TimestampFunction extends CelStandardFunction { + private static final TimestampFunction ALL_OVERLOADS = create(TimestampOverload.values()); + + public static TimestampFunction create() { + return ALL_OVERLOADS; + } public static TimestampFunction create(TimestampFunction.TimestampOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/main/java/dev/cel/runtime/standard/UintFunction.java b/runtime/src/main/java/dev/cel/runtime/standard/UintFunction.java index 723f7bd42..a05258521 100644 --- a/runtime/src/main/java/dev/cel/runtime/standard/UintFunction.java +++ b/runtime/src/main/java/dev/cel/runtime/standard/UintFunction.java @@ -28,6 +28,11 @@ /** Standard function for {@code uint} conversion function. */ public final class UintFunction extends CelStandardFunction { + private static final UintFunction ALL_OVERLOADS = create(UintOverload.values()); + + public static UintFunction create() { + return ALL_OVERLOADS; + } public static UintFunction create(UintFunction.UintOverload... overloads) { return create(Arrays.asList(overloads)); diff --git a/runtime/src/test/java/dev/cel/runtime/BUILD.bazel b/runtime/src/test/java/dev/cel/runtime/BUILD.bazel index 0de69e9d9..7965f80d2 100644 --- a/runtime/src/test/java/dev/cel/runtime/BUILD.bazel +++ b/runtime/src/test/java/dev/cel/runtime/BUILD.bazel @@ -316,6 +316,8 @@ cel_android_local_test( "//runtime:lite_runtime_impl_android", "//runtime:standard_functions_android", "//runtime:unknown_attributes_android", + "//runtime/standard:equals_android", + "//runtime/standard:int_android", "//testing/protos:test_all_types_cel_java_proto2_lite", "//testing/protos:test_all_types_cel_java_proto3_lite", "@cel_spec//proto/cel/expr:checked_java_proto_lite", diff --git a/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java b/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java index 83546d39c..c5d0bf54d 100644 --- a/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java +++ b/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java @@ -50,6 +50,9 @@ import dev.cel.extensions.CelLiteExtensions; import dev.cel.extensions.SetsFunction; import dev.cel.runtime.CelLiteRuntime.Program; +import dev.cel.runtime.standard.EqualsOperator; +import dev.cel.runtime.standard.IntFunction; +import dev.cel.runtime.standard.IntFunction.IntOverload; import java.net.URL; import java.util.List; import java.util.Map; @@ -126,12 +129,13 @@ public void toRuntimeBuilder_propertiesCopied() { CelOptions celOptions = CelOptions.current().enableCelValue(true).build(); CelLiteRuntimeLibrary runtimeExtension = CelLiteExtensions.sets(celOptions, SetsFunction.INTERSECTS); - CelStandardFunctions celStandardFunctions = CelStandardFunctions.newBuilder().build(); CelValueProvider celValueProvider = ProtoMessageLiteValueProvider.newInstance(); + IntFunction intFunction = IntFunction.create(IntOverload.INT64_TO_INT64); + EqualsOperator equalsOperator = EqualsOperator.create(); CelLiteRuntimeBuilder runtimeBuilder = CelLiteRuntimeFactory.newLiteRuntimeBuilder() .setOptions(celOptions) - .setStandardFunctions(celStandardFunctions) + .setStandardFunctions(intFunction, equalsOperator) .addFunctionBindings( CelFunctionBinding.from("string_isEmpty", String.class, String::isEmpty)) .setValueProvider(celValueProvider) @@ -142,9 +146,11 @@ public void toRuntimeBuilder_propertiesCopied() { (LiteRuntimeImpl.Builder) runtime.toRuntimeBuilder(); assertThat(newRuntimeBuilder.celOptions).isEqualTo(celOptions); - assertThat(newRuntimeBuilder.celStandardFunctions).isEqualTo(celStandardFunctions); assertThat(newRuntimeBuilder.celValueProvider).isSameInstanceAs(celValueProvider); assertThat(newRuntimeBuilder.runtimeLibrariesBuilder.build()).containsExactly(runtimeExtension); + assertThat(newRuntimeBuilder.standardFunctionBuilder.build()) + .containsExactly(intFunction, equalsOperator) + .inOrder(); assertThat(newRuntimeBuilder.customFunctionBindings).hasSize(2); assertThat(newRuntimeBuilder.customFunctionBindings).containsKey("string_isEmpty"); assertThat(newRuntimeBuilder.customFunctionBindings).containsKey("list_sets_intersects_list"); @@ -177,7 +183,7 @@ public void standardEnvironment_disabledByDefault() throws Exception { public void eval_add() throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .build(); // Expr: 1 + 2 CelAbstractSyntaxTree ast = readCheckedExpr("compiled_one_plus_two"); @@ -214,7 +220,7 @@ public void eval_listLiteral() throws Exception { public void eval_comprehensionExists() throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .build(); // Expr: [1,2,3].exists(x, x == 3) CelAbstractSyntaxTree ast = readCheckedExpr("compiled_comprehension_exists"); @@ -229,7 +235,7 @@ public void eval_comprehensionExists() throws Exception { public void eval_primitiveVariables() throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .build(); // Expr: bool_var && bytes_var == b'abc' && double_var == 1.0 && int_var == 42 && uint_var == // 42u && str_var == 'foo' @@ -264,7 +270,7 @@ public void eval_customFunctions() throws Exception { .addFunctionBindings( CelFunctionBinding.from("string_isEmpty", String.class, String::isEmpty), CelFunctionBinding.from("list_isEmpty", List.class, List::isEmpty)) - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .build(); // Expr: ''.isEmpty() && [].isEmpty() CelAbstractSyntaxTree ast = readCheckedExpr("compiled_custom_functions"); @@ -281,7 +287,7 @@ public void eval_customFunctions_asLateBoundFunctions() throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() .addFunctionBindings(CelFunctionBinding.from("list_isEmpty", List.class, List::isEmpty)) - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .build(); // Expr: ''.isEmpty() && [].isEmpty() CelAbstractSyntaxTree ast = readCheckedExpr("compiled_custom_functions"); @@ -317,7 +323,7 @@ public void eval_protoMessage_unknowns(String checkedExpr) throws Exception { public void eval_protoMessage_primitiveWithDefaults(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -347,7 +353,7 @@ public void eval_protoMessage_primitiveWithDefaults(String checkedExpr) throws E public void eval_protoMessage_primitives(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -406,7 +412,7 @@ public void eval_protoMessage_primitives(String checkedExpr) throws Exception { public void eval_protoMessage_wrappers(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -454,7 +460,7 @@ public void eval_protoMessage_wrappers(String checkedExpr) throws Exception { public void eval_protoMessage_safeTraversal(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -486,7 +492,7 @@ public void eval_protoMessage_deepTraversalReturnsRepeatedStrings(String checked throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -531,7 +537,7 @@ public void eval_protoMessage_deepTraversalReturnsRepeatedStrings(String checked public void eval_protoMessage_repeatedFields(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), @@ -613,7 +619,7 @@ public void eval_protoMessage_repeatedFields(String checkedExpr) throws Exceptio public void eval_protoMessage_mapFields(String checkedExpr) throws Exception { CelLiteRuntime runtime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelLiteDescriptor.getDescriptor(), diff --git a/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeTest.java b/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeTest.java index f777470d4..38f37404c 100644 --- a/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeTest.java +++ b/runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeTest.java @@ -83,7 +83,7 @@ public class CelLiteRuntimeTest { private static final CelLiteRuntime CEL_RUNTIME = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( dev.cel.expr.conformance.proto2.TestAllTypesCelDescriptor.getDescriptor(), @@ -589,7 +589,7 @@ public void nestedMessage_fromImportedProto() throws Exception { .build(); CelLiteRuntime celRuntime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( SingleFileCelDescriptor.getDescriptor(), @@ -674,7 +674,7 @@ public void eval_withEnumField() throws Exception { .build(); CelLiteRuntime celLiteRuntime = CelLiteRuntimeFactory.newLiteRuntimeBuilder() - .setStandardFunctions(CelStandardFunctions.newBuilder().build()) + .setStandardFunctions(CelStandardFunctions.ALL_STANDARD_FUNCTIONS) .setValueProvider( ProtoMessageLiteValueProvider.newInstance( MessageWithEnumCelDescriptor.getDescriptor())) diff --git a/runtime/standard/BUILD.bazel b/runtime/standard/BUILD.bazel index 9980c17d8..491d5e1ea 100644 --- a/runtime/standard/BUILD.bazel +++ b/runtime/standard/BUILD.bazel @@ -11,6 +11,11 @@ java_library( exports = ["//runtime/src/main/java/dev/cel/runtime/standard:standard_function"], ) +cel_android_library( + name = "standard_function_android", + exports = ["//runtime/src/main/java/dev/cel/runtime/standard:standard_function_android"], +) + java_library( name = "add", exports = ["//runtime/src/main/java/dev/cel/runtime/standard:add"],