Skip to content

Commit 460ef24

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

10 files changed

Lines changed: 83 additions & 171 deletions

File tree

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: 17 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,12 +302,12 @@ 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",
310308
"@maven//:com_google_protobuf_protobuf_java",
311309
"@maven//:org_jspecify_jspecify",
310+
"@maven_android//:com_google_protobuf_protobuf_javalite",
312311
],
313312
)
314313

@@ -328,7 +327,7 @@ cel_android_library(
328327
":interpretable_android",
329328
":interpreter_util_android",
330329
":metadata",
331-
":resolved_overload_internal_android",
330+
":resolved_overload_android",
332331
":runtime_helpers_android",
333332
":runtime_type_provider_android",
334333
":type_resolver_android",
@@ -498,7 +497,6 @@ java_library(
498497
":function_binding",
499498
":function_resolver",
500499
":resolved_overload",
501-
":resolved_overload_internal",
502500
"//:auto_value",
503501
"@maven//:com_google_errorprone_error_prone_annotations",
504502
"@maven//:com_google_guava_guava",
@@ -516,7 +514,6 @@ cel_android_library(
516514
":function_binding_android",
517515
":function_resolver_android",
518516
":resolved_overload_android",
519-
":resolved_overload_internal_android",
520517
"//:auto_value",
521518
"@maven//:com_google_errorprone_error_prone_annotations",
522519
"@maven_android//:com_google_guava_guava",
@@ -584,8 +581,8 @@ java_library(
584581
deps = [
585582
":evaluation_exception",
586583
":evaluation_listener",
584+
":function_resolver",
587585
"//common/annotations",
588-
"//runtime:function_resolver",
589586
"@maven//:com_google_errorprone_error_prone_annotations",
590587
"@maven//:org_jspecify_jspecify",
591588
],
@@ -752,7 +749,7 @@ java_library(
752749
],
753750
deps = [
754751
":evaluation_exception",
755-
":resolved_overload_internal",
752+
":resolved_overload",
756753
"@maven//:com_google_code_findbugs_annotations",
757754
"@maven//:com_google_errorprone_error_prone_annotations",
758755
],
@@ -763,7 +760,7 @@ cel_android_library(
763760
srcs = ["CelFunctionResolver.java"],
764761
deps = [
765762
":evaluation_exception",
766-
":resolved_overload_internal_android",
763+
":resolved_overload_android",
767764
"@maven//:com_google_code_findbugs_annotations",
768765
"@maven//:com_google_errorprone_error_prone_annotations",
769766
],
@@ -793,33 +790,6 @@ cel_android_library(
793790
],
794791
)
795792

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-
823793
java_library(
824794
name = "runtime",
825795
srcs = RUNTIME_SOURCES,
@@ -837,6 +807,7 @@ java_library(
837807
":function_resolver",
838808
":interpretable",
839809
":interpreter",
810+
":program",
840811
":proto_message_activation_factory",
841812
":proto_message_runtime_equality",
842813
":runtime_equality",
@@ -856,7 +827,6 @@ java_library(
856827
"//common/types:cel_types",
857828
"//common/values:cel_value_provider",
858829
"//common/values:proto_message_value_provider",
859-
"//runtime:program",
860830
"@maven//:com_google_code_findbugs_annotations",
861831
"@maven//:com_google_errorprone_error_prone_annotations",
862832
"@maven//:com_google_guava_guava",
@@ -873,12 +843,12 @@ java_library(
873843
deps = [
874844
":evaluation_exception",
875845
":function_binding",
846+
":program",
876847
"//:auto_value",
877848
"//common:cel_ast",
878849
"//common:options",
879850
"//common/annotations",
880851
"//common/values:cel_value_provider",
881-
"//runtime:program",
882852
"//runtime/standard:standard_function",
883853
"@maven//:com_google_code_findbugs_annotations",
884854
"@maven//:com_google_errorprone_error_prone_annotations",
@@ -898,14 +868,14 @@ java_library(
898868
":interpreter",
899869
":lite_program_impl",
900870
":lite_runtime",
871+
":program",
901872
":runtime_equality",
902873
":runtime_helpers",
903874
":type_resolver",
904875
"//:auto_value",
905876
"//common:cel_ast",
906877
"//common:options",
907878
"//common/values:cel_value_provider",
908-
"//runtime:program",
909879
"//runtime/standard:standard_function",
910880
"@maven//:com_google_code_findbugs_annotations",
911881
"@maven//:com_google_guava_guava",
@@ -1201,10 +1171,11 @@ java_library(
12011171
],
12021172
deps = [
12031173
":function_overload",
1204-
":resolved_overload_internal",
1174+
":unknown_attributes",
12051175
"//:auto_value",
12061176
"@maven//:com_google_errorprone_error_prone_annotations",
12071177
"@maven//:com_google_guava_guava",
1178+
"@maven//:com_google_protobuf_protobuf_java",
12081179
],
12091180
)
12101181

@@ -1215,10 +1186,11 @@ cel_android_library(
12151186
],
12161187
deps = [
12171188
":function_overload_android",
1218-
":resolved_overload_internal_android",
1189+
":unknown_attributes_android",
12191190
"//:auto_value",
12201191
"@maven//:com_google_errorprone_error_prone_annotations",
12211192
"@maven_android//:com_google_guava_guava",
1193+
"@maven_android//:com_google_protobuf_protobuf_javalite",
12221194
],
12231195
)
12241196

@@ -1253,9 +1225,9 @@ java_library(
12531225
tags = [
12541226
],
12551227
deps = [
1228+
":function_binding",
12561229
":function_overload",
12571230
"//common/annotations",
1258-
"//runtime:function_binding",
12591231
"@maven//:com_google_guava_guava",
12601232
],
12611233
)
@@ -1266,9 +1238,9 @@ cel_android_library(
12661238
tags = [
12671239
],
12681240
deps = [
1241+
":function_binding_android",
12691242
":function_overload_android",
12701243
"//common/annotations",
1271-
"//runtime:function_binding_android",
12721244
"@maven_android//:com_google_guava_guava",
12731245
],
12741246
)

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)