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
6 changes: 0 additions & 6 deletions runtime/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -204,12 +204,6 @@ cel_android_library(
exports = ["//runtime/src/main/java/dev/cel/runtime:type_resolver_android"],
)

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

java_library(
name = "unknown_attributes",
exports = ["//runtime/src/main/java/dev/cel/runtime:unknown_attributes"],
Expand Down
3 changes: 1 addition & 2 deletions runtime/src/main/java/dev/cel/runtime/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ java_library(
name = "descriptor_type_resolver",
srcs = ["DescriptorTypeResolver.java"],
tags = [
"avoid_dep",
],
deps = [
":type_resolver",
Expand All @@ -250,7 +251,6 @@ java_library(
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:org_jspecify_jspecify",
],
)

Expand Down Expand Up @@ -828,7 +828,6 @@ java_library(
],
deps = [
":async_options",
":descriptor_type_resolver",
":dispatcher",
":evaluation_exception",
":evaluation_listener",
Expand Down
8 changes: 3 additions & 5 deletions runtime/src/main/java/dev/cel/runtime/CelRuntimeImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -558,14 +558,12 @@ public CelRuntime build() {
new CelTypeProvider.CombinedCelTypeProvider(combinedTypeProvider, typeProvider());
}

DescriptorTypeResolver descriptorTypeResolver =
DescriptorTypeResolver.create(combinedTypeProvider, celValueConverter);
TypeFunction typeFunction = TypeFunction.create(descriptorTypeResolver);

mutableFunctionBindings.putAll(functionBindings());

for (CelFunctionBinding binding :
typeFunction.newFunctionBindings(options(), runtimeEquality)) {
TypeFunction.create()
.newFunctionBindings(
options(), runtimeEquality, combinedTypeProvider, celValueConverter)) {
mutableFunctionBindings.put(binding.getOverloadId(), binding);
}

Expand Down
47 changes: 11 additions & 36 deletions runtime/src/main/java/dev/cel/runtime/DescriptorTypeResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,47 +20,32 @@
import com.google.protobuf.MessageOrBuilder;
import dev.cel.common.annotations.Internal;
import dev.cel.common.types.CelType;
import dev.cel.common.types.CelTypeProvider;
import dev.cel.common.types.DefaultTypeProvider;
import dev.cel.common.types.StructTypeReference;
import dev.cel.common.types.TypeType;
import dev.cel.common.values.CelValueConverter;
import java.util.NoSuchElementException;
import java.util.Optional;
import org.jspecify.annotations.Nullable;

/**
* {@code DescriptorTypeResolver} extends {@link TypeResolver} and additionally resolves incoming
* protobuf message types using descriptors.
*
* <p>CEL Library Internals. Do Not Use.
*
* @deprecated This only exists to maintain support for the legacy runtime. Use {@link TypeResolver}
* instead.
*/
@Deprecated
@Immutable
@Internal
public final class DescriptorTypeResolver extends TypeResolver {

private final @Nullable CelTypeProvider typeProvider;
final class DescriptorTypeResolver extends TypeResolver {

/**
* Creates a {@code DescriptorTypeResolver}. All protobuf messages are resolved as a type of
* {@link StructTypeReference}.
*
* @deprecated This only exists to maintain support for the legacy runtime. Use {@link
* #create(CelTypeProvider, CelValueConverter)} instead.
*/
@Deprecated
static DescriptorTypeResolver create(CelValueConverter celValueConverter) {
return new DescriptorTypeResolver(null, celValueConverter);
}

/**
* Creates a {@code DescriptorTypeResolver}. If the protobuf message to be resolved can be found
* in the provided {@link CelTypeProvider}, the message is resolved as a concrete {@code
* ProtoMessageType} instead of a {@link StructTypeReference}.
*/
public static DescriptorTypeResolver create(
CelTypeProvider typeProvider, CelValueConverter celValueConverter) {
return new DescriptorTypeResolver(typeProvider, celValueConverter);
return new DescriptorTypeResolver(celValueConverter);
}

@Override
Expand All @@ -73,25 +58,15 @@ public TypeType resolveObjectType(Object obj, CelType typeCheckedType) {
}

if (obj instanceof MessageOrBuilder) {
MessageOrBuilder msg = (MessageOrBuilder) obj;
String typeName = msg.getDescriptorForType().getFullName();
if (typeProvider != null) {
return typeProvider
.findType(typeName)
.map(TypeType::create)
.orElseThrow(() -> new NoSuchElementException("Could not find type: " + typeName));
} else {
return TypeType.create(StructTypeReference.create(typeName));
}
return TypeType.create(
StructTypeReference.create(
((MessageOrBuilder) obj).getDescriptorForType().getFullName()));
}

return super.resolveObjectType(obj, typeCheckedType);
}

private DescriptorTypeResolver(
@Nullable CelTypeProvider typeProvider, CelValueConverter celValueConverter) {
super(
typeProvider != null ? typeProvider : DefaultTypeProvider.getInstance(), celValueConverter);
this.typeProvider = typeProvider;
private DescriptorTypeResolver(CelValueConverter celValueConverter) {
super(DefaultTypeProvider.getInstance(), celValueConverter);
}
}
2 changes: 0 additions & 2 deletions runtime/src/main/java/dev/cel/runtime/standard/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -1418,7 +1418,6 @@ java_library(
"//runtime:type_resolver",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_guava_guava",
"@maven//:org_jspecify_jspecify",
],
)

Expand All @@ -1438,7 +1437,6 @@ cel_android_library(
"//runtime:runtime_equality_android",
"//runtime:type_resolver_android",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:org_jspecify_jspecify",
"@maven_android//:com_google_guava_guava",
],
)
Expand Down
26 changes: 3 additions & 23 deletions runtime/src/main/java/dev/cel/runtime/standard/TypeFunction.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@

package dev.cel.runtime.standard;

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.collect.ImmutableSet;
import com.google.errorprone.annotations.Immutable;
import dev.cel.common.CelOptions;
Expand All @@ -27,15 +25,12 @@
import dev.cel.runtime.RuntimeEquality;
import dev.cel.runtime.TypeResolver;
import java.util.Arrays;
import org.jspecify.annotations.Nullable;

/** Standard function for the {@code type} function. */
@Immutable
public final class TypeFunction extends CelStandardFunction {
private static final TypeFunction ALL_OVERLOADS = create(TypeOverload.values());

private final @Nullable TypeResolver typeResolver;

public static TypeFunction create() {
return ALL_OVERLOADS;
}
Expand All @@ -45,11 +40,7 @@ public static TypeFunction create(TypeFunction.TypeOverload... overloads) {
}

public static TypeFunction create(Iterable<TypeFunction.TypeOverload> overloads) {
return new TypeFunction(ImmutableSet.copyOf(overloads), /* typeResolver= */ null);
}

public static TypeFunction create(TypeResolver typeResolver) {
return new TypeFunction(ImmutableSet.copyOf(TypeOverload.values()), checkNotNull(typeResolver));
return new TypeFunction(ImmutableSet.copyOf(overloads));
}

/** Overloads for the standard {@code type} function. */
Expand All @@ -67,22 +58,13 @@ public CelFunctionBinding newFunctionBinding(
}
}

@Override
public ImmutableSet<CelFunctionBinding> newFunctionBindings(
CelOptions celOptions, RuntimeEquality runtimeEquality) {
return newFunctionBindings(checkNotNull(typeResolver));
}

@Override
public ImmutableSet<CelFunctionBinding> newFunctionBindings(
CelOptions celOptions,
RuntimeEquality runtimeEquality,
CelTypeProvider celTypeProvider,
CelValueConverter celValueConverter) {
return newFunctionBindings(TypeResolver.create(celTypeProvider, celValueConverter));
}

private static ImmutableSet<CelFunctionBinding> newFunctionBindings(TypeResolver typeResolver) {
TypeResolver typeResolver = TypeResolver.create(celTypeProvider, celValueConverter);
CelFunctionBinding binding =
CelFunctionBinding.from(
"type",
Expand All @@ -92,9 +74,7 @@ private static ImmutableSet<CelFunctionBinding> newFunctionBindings(TypeResolver
return CelFunctionBinding.fromOverloads("type", binding);
}

private TypeFunction(
ImmutableSet<CelStandardOverload> overloads, @Nullable TypeResolver typeResolver) {
private TypeFunction(ImmutableSet<CelStandardOverload> overloads) {
super("type", overloads);
this.typeResolver = typeResolver;
}
}
1 change: 0 additions & 1 deletion runtime/src/test/java/dev/cel/runtime/planner/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ java_library(
"//parser:macro",
"//runtime",
"//runtime:accumulated_unknowns",
"//runtime:descriptor_type_resolver",
"//runtime:dispatcher",
"//runtime:function_binding",
"//runtime:function_resolver",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@
import dev.cel.runtime.CelStandardFunctions.StandardFunction;
import dev.cel.runtime.CelUnknownSet;
import dev.cel.runtime.DefaultDispatcher;
import dev.cel.runtime.DescriptorTypeResolver;
import dev.cel.runtime.InternalCelFunctionBinding;
import dev.cel.runtime.PartialVars;
import dev.cel.runtime.Program;
Expand Down Expand Up @@ -246,11 +245,10 @@ private static DefaultDispatcher newDispatcher(CelOptions celOptions) {
addBindingsToDispatcher(
builder, stdFunctions.newFunctionBindings(RUNTIME_EQUALITY, celOptions));

TypeFunction typeFunction =
TypeFunction.create(
DescriptorTypeResolver.create(TYPE_PROVIDER, CelValueConverter.getDefaultInstance()));
addBindingsToDispatcher(
builder, typeFunction.newFunctionBindings(celOptions, RUNTIME_EQUALITY));
builder,
TypeFunction.create()
.newFunctionBindings(celOptions, RUNTIME_EQUALITY, TYPE_PROVIDER, CEL_VALUE_CONVERTER));
addBindingsToDispatcher(
builder,
CelFunctionBinding.fromOverloads(
Expand Down
Loading