Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions runtime/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,6 @@ cel_android_library(
exports = ["//runtime/src/main/java/dev/cel/runtime:late_function_binding_android"],
)

java_library(
name = "function_overload_impl",
visibility = ["//:internal"],
exports = ["//runtime/src/main/java/dev/cel/runtime:function_overload_impl"],
)

java_library(
name = "evaluation_exception_builder",
exports = ["//runtime/src/main/java/dev/cel/runtime:evaluation_exception_builder"],
Expand Down Expand Up @@ -220,3 +214,21 @@ cel_android_library(
visibility = ["//:internal"],
exports = ["//runtime/src/main/java/dev/cel/runtime:lite_runtime_impl_android"],
)

java_library(
name = "resolved_overload",
visibility = ["//:internal"],
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload"],
)

cel_android_library(
name = "resolved_overload_android",
visibility = ["//:internal"],
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_android"],
)

java_library(
name = "resolved_overload_internal",
visibility = ["//:internal"],
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_internal"],
)
94 changes: 61 additions & 33 deletions runtime/src/main/java/dev/cel/runtime/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,6 @@ FUNCTION_BINDING_SOURCES = [
"FunctionBindingImpl.java",
]

# keep sorted
FUNCTION_OVERLOAD_IMPL_SOURCES = [
"FunctionOverload.java",
"FunctionResolver.java",
"ResolvedOverload.java",
]

# keep sorted
INTERPRABLE_SOURCES = [
"GlobalResolver.java",
Expand Down Expand Up @@ -128,10 +121,12 @@ java_library(
":base",
":evaluation_exception",
":evaluation_exception_builder",
":function_overload_impl",
":resolved_overload",
":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",
"@maven//:com_google_guava_guava",
Expand All @@ -146,7 +141,9 @@ cel_android_library(
":base_android",
":evaluation_exception",
":evaluation_exception_builder",
":function_overload_impl_android",
":function_resolver_android",
":resolved_overload_android",
":resolved_overload_internal_android",
"//:auto_value",
"//common:error_codes",
"//common/annotations",
Expand Down Expand Up @@ -250,7 +247,7 @@ java_library(
tags = [
],
deps = [
":function_overload_impl",
":function_overload",
":metadata",
"//common:cel_ast",
"//common/annotations",
Expand All @@ -264,11 +261,10 @@ cel_android_library(
srcs = BASE_SOURCES,
visibility = ["//visibility:private"],
deps = [
":function_overload_impl_android",
":function_overload_android",
":metadata",
"//common:cel_ast_android",
"//common/annotations",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
Expand All @@ -288,10 +284,10 @@ java_library(
":evaluation_exception",
":evaluation_exception_builder",
":evaluation_listener",
":function_overload_impl",
":interpretable",
":interpreter_util",
":metadata",
":resolved_overload_internal",
":runtime_helpers",
":runtime_type_provider",
":type_resolver",
Expand All @@ -306,6 +302,7 @@ java_library(
"//common/types",
"//common/types:type_providers",
"//common/values:cel_byte_string",
"//runtime:function_resolver",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
Expand All @@ -326,10 +323,11 @@ cel_android_library(
":evaluation_exception",
":evaluation_exception_builder",
":evaluation_listener_android",
":function_overload_impl_android",
":function_resolver_android",
":interpretable_android",
":interpreter_util_android",
":metadata",
":resolved_overload_internal_android",
":runtime_helpers_android",
":runtime_type_provider_android",
":type_resolver_android",
Expand Down Expand Up @@ -486,7 +484,6 @@ RUNTIME_SOURCES = [

LATE_FUNCTION_BINDING_SOURCES = [
"CelLateFunctionBindings.java",
"CelResolvedOverload.java",
]

java_library(
Expand All @@ -498,9 +495,9 @@ java_library(
":dispatcher",
":evaluation_exception",
":function_binding",
":function_overload",
":function_overload_impl",
":function_resolver",
":resolved_overload",
":resolved_overload_internal",
"//:auto_value",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
Expand All @@ -516,9 +513,9 @@ cel_android_library(
":dispatcher_android",
":evaluation_exception",
":function_binding_android",
":function_overload_android",
":function_overload_impl_android",
":function_resolver_android",
":resolved_overload_android",
":resolved_overload_internal_android",
"//:auto_value",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
Expand Down Expand Up @@ -586,8 +583,8 @@ java_library(
deps = [
":evaluation_exception",
":evaluation_listener",
":function_overload_impl",
"//common/annotations",
"//runtime:function_resolver",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:org_jspecify_jspecify",
],
Expand All @@ -600,7 +597,7 @@ cel_android_library(
deps = [
":evaluation_exception",
":evaluation_listener_android",
":function_overload_impl_android",
":function_resolver_android",
"//common/annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:org_jspecify_jspecify",
Expand Down Expand Up @@ -652,6 +649,7 @@ java_library(
"//runtime/standard:not_equals",
"//runtime/standard:size",
"//runtime/standard:standard_function",
"//runtime/standard:standard_overload",
"//runtime/standard:starts_with",
"//runtime/standard:string",
"//runtime/standard:subtract",
Expand Down Expand Up @@ -707,6 +705,7 @@ cel_android_library(
"//runtime/standard:not_equals_android",
"//runtime/standard:size_android",
"//runtime/standard:standard_function_android",
"//runtime/standard:standard_overload_android",
"//runtime/standard:starts_with_android",
"//runtime/standard:string_android",
"//runtime/standard:subtract_android",
Expand Down Expand Up @@ -751,7 +750,8 @@ java_library(
tags = [
],
deps = [
":function_overload_impl",
":evaluation_exception",
":resolved_overload_internal",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
],
Expand All @@ -761,7 +761,8 @@ cel_android_library(
name = "function_resolver_android",
srcs = ["CelFunctionResolver.java"],
deps = [
":function_overload_impl_android",
":evaluation_exception",
":resolved_overload_internal_android",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
],
Expand All @@ -775,7 +776,7 @@ java_library(
tags = [
],
deps = [
":function_overload_impl",
":evaluation_exception",
"@maven//:com_google_errorprone_error_prone_annotations",
],
)
Expand All @@ -786,31 +787,30 @@ cel_android_library(
"CelFunctionOverload.java",
],
deps = [
":function_overload_impl_android",
":evaluation_exception",
"@maven//:com_google_errorprone_error_prone_annotations",
],
)

java_library(
name = "function_overload_impl",
srcs = FUNCTION_OVERLOAD_IMPL_SOURCES,
name = "resolved_overload_internal",
srcs = ["ResolvedOverload.java"],
tags = [
],
deps = [
":evaluation_exception",
"//common/annotations",
":function_overload",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_protobuf_protobuf_java",
],
)

cel_android_library(
name = "function_overload_impl_android",
srcs = FUNCTION_OVERLOAD_IMPL_SOURCES,
name = "resolved_overload_internal_android",
srcs = ["ResolvedOverload.java"],
visibility = ["//visibility:private"],
deps = [
":evaluation_exception",
"//common/annotations",
":function_overload_android",
"@maven//:com_google_code_findbugs_annotations",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_protobuf_protobuf_javalite",
Expand Down Expand Up @@ -1167,3 +1167,31 @@ cel_android_library(
"@maven//:com_google_errorprone_error_prone_annotations",
],
)

java_library(
name = "resolved_overload",
srcs = ["CelResolvedOverload.java"],
tags = [
],
deps = [
":function_overload",
":resolved_overload_internal",
"//:auto_value",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
],
)

cel_android_library(
name = "resolved_overload_android",
srcs = ["CelResolvedOverload.java"],
tags = [
],
deps = [
":function_overload_android",
":resolved_overload_internal_android",
"//:auto_value",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven_android//:com_google_guava_guava",
],
)
13 changes: 10 additions & 3 deletions runtime/src/main/java/dev/cel/runtime/CelFunctionOverload.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,28 @@
/** Interface describing the general signature of all CEL custom function implementations. */
@Immutable
@FunctionalInterface
public interface CelFunctionOverload extends FunctionOverload {
public interface CelFunctionOverload {

/** Evaluate a set of arguments throwing a {@code CelException} on error. */
Object apply(Object[] args) throws CelEvaluationException;

/**
* Helper interface for describing unary functions where the type-parameter is used to improve
* compile-time correctness of function bindings.
*/
@Immutable
@FunctionalInterface
interface Unary<T> extends FunctionOverload.Unary<T> {}
interface Unary<T> {
Object apply(T arg) throws CelEvaluationException;
}

/**
* Helper interface for describing binary functions where the type parameters are used to improve
* compile-time correctness of function bindings.
*/
@Immutable
@FunctionalInterface
interface Binary<T1, T2> extends FunctionOverload.Binary<T1, T2> {}
interface Binary<T1, T2> {
Object apply(T1 arg1, T2 arg2) throws CelEvaluationException;
}
}
18 changes: 17 additions & 1 deletion runtime/src/main/java/dev/cel/runtime/CelFunctionResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,26 @@
package dev.cel.runtime;

import javax.annotation.concurrent.ThreadSafe;
import java.util.List;
import java.util.Optional;

/**
* Interface to a resolver for CEL functions based on the function name, overload ids, and
* arguments.
*/
@ThreadSafe
public interface CelFunctionResolver extends FunctionResolver {}
public interface CelFunctionResolver {

/**
* Finds a specific function overload to invoke based on given parameters.
*
* @param functionName the logical name of the function being invoked.
* @param overloadIds A list of function overload ids. The dispatcher selects the unique overload
* from this list with matching arguments.
* @param args The arguments to pass to the function.
* @return an optional value of the resolved overload.
* @throws CelEvaluationException if the overload resolution is ambiguous,
*/
Optional<ResolvedOverload> findOverload(
String functionName, List<String> overloadIds, Object[] args) throws CelEvaluationException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static CelLateFunctionBindings from(List<CelFunctionBinding> functions) {
private static ResolvedOverload createResolvedOverload(CelFunctionBinding binding) {
return CelResolvedOverload.of(
binding.getOverloadId(),
binding.getArgTypes(),
(args) -> binding.getDefinition().apply(args));
(args) -> binding.getDefinition().apply(args),
binding.getArgTypes());
}
}
Loading
Loading