Skip to content

Commit aa9f794

Browse files
l46kokcopybara-github
authored andcommitted
Remove extraneous ResolvedOverload in lieu of CelResolvedOverload
PiperOrigin-RevId: 836386782
1 parent d7ad94d commit aa9f794

File tree

10 files changed

+82
-171
lines changed

10 files changed

+82
-171
lines changed

runtime/BUILD.bazel

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,6 @@ cel_android_library(
227227
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_android"],
228228
)
229229

230-
java_library(
231-
name = "resolved_overload_internal",
232-
visibility = ["//:internal"],
233-
exports = ["//runtime/src/main/java/dev/cel/runtime:resolved_overload_internal"],
234-
)
235-
236230
java_library(
237231
name = "internal_function_binder",
238232
visibility = ["//:internal"],

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

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,10 @@ java_library(
124124
":evaluation_exception",
125125
":evaluation_exception_builder",
126126
":function_overload",
127+
":function_resolver",
127128
":resolved_overload",
128-
":resolved_overload_internal",
129129
"//:auto_value",
130130
"//common:error_codes",
131-
"//runtime:function_resolver",
132131
"@maven//:com_google_code_findbugs_annotations",
133132
"@maven//:com_google_errorprone_error_prone_annotations",
134133
"@maven//:com_google_guava_guava",
@@ -145,7 +144,6 @@ cel_android_library(
145144
":function_overload_android",
146145
":function_resolver_android",
147146
":resolved_overload_android",
148-
":resolved_overload_internal_android",
149147
"//:auto_value",
150148
"//common:error_codes",
151149
"@maven//:com_google_code_findbugs_annotations",
@@ -285,10 +283,11 @@ java_library(
285283
":evaluation_exception",
286284
":evaluation_exception_builder",
287285
":evaluation_listener",
286+
":function_resolver",
288287
":interpretable",
289288
":interpreter_util",
290289
":metadata",
291-
":resolved_overload_internal",
290+
":resolved_overload",
292291
":runtime_helpers",
293292
":runtime_type_provider",
294293
":type_resolver",
@@ -303,7 +302,6 @@ java_library(
303302
"//common/types",
304303
"//common/types:type_providers",
305304
"//common/values:cel_byte_string",
306-
"//runtime:function_resolver",
307305
"@maven//:com_google_code_findbugs_annotations",
308306
"@maven//:com_google_errorprone_error_prone_annotations",
309307
"@maven//:com_google_guava_guava",
@@ -328,7 +326,7 @@ cel_android_library(
328326
":interpretable_android",
329327
":interpreter_util_android",
330328
":metadata",
331-
":resolved_overload_internal_android",
329+
":resolved_overload_android",
332330
":runtime_helpers_android",
333331
":runtime_type_provider_android",
334332
":type_resolver_android",
@@ -498,7 +496,6 @@ java_library(
498496
":function_binding",
499497
":function_resolver",
500498
":resolved_overload",
501-
":resolved_overload_internal",
502499
"//:auto_value",
503500
"@maven//:com_google_errorprone_error_prone_annotations",
504501
"@maven//:com_google_guava_guava",
@@ -516,7 +513,6 @@ cel_android_library(
516513
":function_binding_android",
517514
":function_resolver_android",
518515
":resolved_overload_android",
519-
":resolved_overload_internal_android",
520516
"//:auto_value",
521517
"@maven//:com_google_errorprone_error_prone_annotations",
522518
"@maven_android//:com_google_guava_guava",
@@ -584,8 +580,8 @@ java_library(
584580
deps = [
585581
":evaluation_exception",
586582
":evaluation_listener",
583+
":function_resolver",
587584
"//common/annotations",
588-
"//runtime:function_resolver",
589585
"@maven//:com_google_errorprone_error_prone_annotations",
590586
"@maven//:org_jspecify_jspecify",
591587
],
@@ -752,7 +748,7 @@ java_library(
752748
],
753749
deps = [
754750
":evaluation_exception",
755-
":resolved_overload_internal",
751+
":resolved_overload",
756752
"@maven//:com_google_code_findbugs_annotations",
757753
"@maven//:com_google_errorprone_error_prone_annotations",
758754
],
@@ -763,7 +759,7 @@ cel_android_library(
763759
srcs = ["CelFunctionResolver.java"],
764760
deps = [
765761
":evaluation_exception",
766-
":resolved_overload_internal_android",
762+
":resolved_overload_android",
767763
"@maven//:com_google_code_findbugs_annotations",
768764
"@maven//:com_google_errorprone_error_prone_annotations",
769765
],
@@ -793,33 +789,6 @@ cel_android_library(
793789
],
794790
)
795791

796-
java_library(
797-
name = "resolved_overload_internal",
798-
srcs = ["ResolvedOverload.java"],
799-
tags = [
800-
],
801-
deps = [
802-
":function_overload",
803-
":unknown_attributes",
804-
"@maven//:com_google_code_findbugs_annotations",
805-
"@maven//:com_google_errorprone_error_prone_annotations",
806-
"@maven//:com_google_protobuf_protobuf_java",
807-
],
808-
)
809-
810-
cel_android_library(
811-
name = "resolved_overload_internal_android",
812-
srcs = ["ResolvedOverload.java"],
813-
visibility = ["//visibility:private"],
814-
deps = [
815-
":function_overload_android",
816-
":unknown_attributes_android",
817-
"@maven//:com_google_code_findbugs_annotations",
818-
"@maven//:com_google_errorprone_error_prone_annotations",
819-
"@maven_android//:com_google_protobuf_protobuf_javalite",
820-
],
821-
)
822-
823792
java_library(
824793
name = "runtime",
825794
srcs = RUNTIME_SOURCES,
@@ -837,6 +806,7 @@ java_library(
837806
":function_resolver",
838807
":interpretable",
839808
":interpreter",
809+
":program",
840810
":proto_message_activation_factory",
841811
":proto_message_runtime_equality",
842812
":runtime_equality",
@@ -856,7 +826,6 @@ java_library(
856826
"//common/types:cel_types",
857827
"//common/values:cel_value_provider",
858828
"//common/values:proto_message_value_provider",
859-
"//runtime:program",
860829
"@maven//:com_google_code_findbugs_annotations",
861830
"@maven//:com_google_errorprone_error_prone_annotations",
862831
"@maven//:com_google_guava_guava",
@@ -873,12 +842,12 @@ java_library(
873842
deps = [
874843
":evaluation_exception",
875844
":function_binding",
845+
":program",
876846
"//:auto_value",
877847
"//common:cel_ast",
878848
"//common:options",
879849
"//common/annotations",
880850
"//common/values:cel_value_provider",
881-
"//runtime:program",
882851
"//runtime/standard:standard_function",
883852
"@maven//:com_google_code_findbugs_annotations",
884853
"@maven//:com_google_errorprone_error_prone_annotations",
@@ -898,14 +867,14 @@ java_library(
898867
":interpreter",
899868
":lite_program_impl",
900869
":lite_runtime",
870+
":program",
901871
":runtime_equality",
902872
":runtime_helpers",
903873
":type_resolver",
904874
"//:auto_value",
905875
"//common:cel_ast",
906876
"//common:options",
907877
"//common/values:cel_value_provider",
908-
"//runtime:program",
909878
"//runtime/standard:standard_function",
910879
"@maven//:com_google_code_findbugs_annotations",
911880
"@maven//:com_google_guava_guava",
@@ -1201,10 +1170,11 @@ java_library(
12011170
],
12021171
deps = [
12031172
":function_overload",
1204-
":resolved_overload_internal",
1173+
":unknown_attributes",
12051174
"//:auto_value",
12061175
"@maven//:com_google_errorprone_error_prone_annotations",
12071176
"@maven//:com_google_guava_guava",
1177+
"@maven//:com_google_protobuf_protobuf_java",
12081178
],
12091179
)
12101180

@@ -1215,10 +1185,11 @@ cel_android_library(
12151185
],
12161186
deps = [
12171187
":function_overload_android",
1218-
":resolved_overload_internal_android",
1188+
":unknown_attributes_android",
12191189
"//:auto_value",
12201190
"@maven//:com_google_errorprone_error_prone_annotations",
12211191
"@maven_android//:com_google_guava_guava",
1192+
"@maven_android//:com_google_protobuf_protobuf_javalite",
12221193
],
12231194
)
12241195

@@ -1253,9 +1224,9 @@ java_library(
12531224
tags = [
12541225
],
12551226
deps = [
1227+
":function_binding",
12561228
":function_overload",
12571229
"//common/annotations",
1258-
"//runtime:function_binding",
12591230
"@maven//:com_google_guava_guava",
12601231
],
12611232
)
@@ -1266,9 +1237,9 @@ cel_android_library(
12661237
tags = [
12671238
],
12681239
deps = [
1240+
":function_binding_android",
12691241
":function_overload_android",
12701242
"//common/annotations",
1271-
"//runtime:function_binding_android",
12721243
"@maven_android//:com_google_guava_guava",
12731244
],
12741245
)

runtime/src/main/java/dev/cel/runtime/CelFunctionResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ public interface CelFunctionResolver {
3535
* @return an optional value of the resolved overload.
3636
* @throws CelEvaluationException if the overload resolution is ambiguous,
3737
*/
38-
Optional<ResolvedOverload> findOverloadMatchingArgs(
38+
Optional<CelResolvedOverload> findOverloadMatchingArgs(
3939
String functionName, List<String> overloadIds, Object[] args) throws CelEvaluationException;
4040
}

runtime/src/main/java/dev/cel/runtime/CelLateFunctionBindings.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@
2929
@Immutable
3030
public final class CelLateFunctionBindings implements CelFunctionResolver {
3131

32-
private final ImmutableMap<String, ResolvedOverload> functions;
32+
private final ImmutableMap<String, CelResolvedOverload> functions;
3333

34-
private CelLateFunctionBindings(ImmutableMap<String, ResolvedOverload> functions) {
34+
private CelLateFunctionBindings(ImmutableMap<String, CelResolvedOverload> functions) {
3535
this.functions = functions;
3636
}
3737

3838
@Override
39-
public Optional<ResolvedOverload> findOverloadMatchingArgs(
39+
public Optional<CelResolvedOverload> findOverloadMatchingArgs(
4040
String functionName, List<String> overloadIds, Object[] args) throws CelEvaluationException {
4141
return DefaultDispatcher.findOverloadMatchingArgs(functionName, overloadIds, functions, args);
4242
}
@@ -54,7 +54,7 @@ public static CelLateFunctionBindings from(List<CelFunctionBinding> functions) {
5454
CelLateFunctionBindings::createResolvedOverload)));
5555
}
5656

57-
private static ResolvedOverload createResolvedOverload(CelFunctionBinding binding) {
57+
private static CelResolvedOverload createResolvedOverload(CelFunctionBinding binding) {
5858
return CelResolvedOverload.of(
5959
binding.getOverloadId(),
6060
(args) -> binding.getDefinition().apply(args),

runtime/src/main/java/dev/cel/runtime/CelResolvedOverload.java

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@
1717
import com.google.auto.value.AutoValue;
1818
import com.google.common.collect.ImmutableList;
1919
import com.google.errorprone.annotations.Immutable;
20+
import com.google.protobuf.MessageLite;
2021
import java.util.List;
22+
import java.util.Map;
2123

2224
/**
2325
* Representation of a function overload which has been resolved to a specific set of argument types
2426
* and a function definition.
2527
*/
2628
@AutoValue
2729
@Immutable
28-
abstract class CelResolvedOverload implements ResolvedOverload {
30+
abstract class CelResolvedOverload {
2931

3032
/** The overload id of the function. */
31-
@Override
3233
public abstract String getOverloadId();
3334

3435
/** The types of the function parameters. */
35-
@Override
3636
public abstract ImmutableList<Class<?>> getParameterTypes();
3737

3838
/* Denotes whether an overload is strict.
@@ -47,11 +47,9 @@ abstract class CelResolvedOverload implements ResolvedOverload {
4747
*
4848
* <p>In a vast majority of cases, this should be set to true.
4949
*/
50-
@Override
5150
public abstract boolean isStrict();
5251

5352
/** The function definition. */
54-
@Override
5553
public abstract CelFunctionOverload getDefinition();
5654

5755
/**
@@ -76,4 +74,41 @@ public static CelResolvedOverload of(
7674
return new AutoValue_CelResolvedOverload(
7775
overloadId, ImmutableList.copyOf(parameterTypes), isStrict, definition);
7876
}
77+
78+
/**
79+
* Returns true if the overload's expected argument types match the types of the given arguments.
80+
*/
81+
boolean canHandle(Object[] arguments) {
82+
ImmutableList<Class<?>> parameterTypes = getParameterTypes();
83+
if (parameterTypes.size() != arguments.length) {
84+
return false;
85+
}
86+
for (int i = 0; i < parameterTypes.size(); i++) {
87+
Class<?> paramType = parameterTypes.get(i);
88+
Object arg = arguments[i];
89+
if (arg == null) {
90+
// null can be assigned to messages, maps, and to objects.
91+
// TODO: Remove null special casing
92+
if (paramType != Object.class
93+
&& !MessageLite.class.isAssignableFrom(paramType)
94+
&& !Map.class.isAssignableFrom(paramType)) {
95+
return false;
96+
}
97+
continue;
98+
}
99+
100+
if (arg instanceof Exception || arg instanceof CelUnknownSet) {
101+
// Only non-strict functions can accept errors/unknowns as arguments to a function
102+
if (!isStrict()) {
103+
// Skip assignability check below, but continue to validate remaining args
104+
continue;
105+
}
106+
}
107+
108+
if (!paramType.isAssignableFrom(arg.getClass())) {
109+
return false;
110+
}
111+
}
112+
return true;
113+
}
79114
}

0 commit comments

Comments
 (0)