@@ -112,22 +112,7 @@ public Program createProgram(CelAbstractSyntaxTree ast) throws CelEvaluationExce
112112 return toRuntimeProgram (planner ().plan (ast ));
113113 }
114114
115- private static final CelFunctionResolver EMPTY_FUNCTION_RESOLVER =
116- new CelFunctionResolver () {
117- @ Override
118- public Optional <CelResolvedOverload > findOverloadMatchingArgs (
119- String functionName , Collection <String > overloadIds , Object [] args ) {
120- return Optional .empty ();
121- }
122-
123- @ Override
124- public Optional <CelResolvedOverload > findOverloadMatchingArgs (
125- String functionName , Object [] args ) {
126- return Optional .empty ();
127- }
128- };
129-
130- public Program toRuntimeProgram (dev .cel .runtime .Program program ) {
115+ private Program toRuntimeProgram (PlannedProgram program ) {
131116 return new Program () {
132117
133118 @ Override
@@ -148,11 +133,9 @@ public Object eval(Map<String, ?> mapValue, CelFunctionResolver lateBoundFunctio
148133
149134 @ Override
150135 public Object eval (Message message ) throws CelEvaluationException {
151- PlannedProgram plannedProgram = (PlannedProgram ) program ;
152- return plannedProgram .evalOrThrow (
153- plannedProgram .interpretable (),
154- ProtoMessageActivationFactory .fromProto (message , plannedProgram .options ()),
155- EMPTY_FUNCTION_RESOLVER ,
136+ return program .evalOrThrow (
137+ ProtoMessageActivationFactory .fromProto (message , program .options ()),
138+ CelFunctionResolver .EMPTY ,
156139 /* partialVars= */ null ,
157140 /* listener= */ null );
158141 }
@@ -190,12 +173,6 @@ public ListenableFuture<Object> evalAsync(
190173 return program .evalAsync (mapValue , lateBoundFunctionResolver );
191174 }
192175
193- @ Override
194- public ListenableFuture <Object > evalAsync (Message message ) {
195- throw new UnsupportedOperationException (
196- "evalAsync is not supported by this Program implementation." );
197- }
198-
199176 @ Override
200177 public ListenableFuture <Object > evalAsync (CelVariableResolver resolver ) {
201178 return program .evalAsync (resolver );
@@ -212,40 +189,42 @@ public ListenableFuture<Object> evalAsync(PartialVars partialVars) {
212189 return program .evalAsync (partialVars );
213190 }
214191
192+ @ Override
193+ public ListenableFuture <Object > evalAsync (Message message ) {
194+ checkNotNull (message , "message" );
195+ return program .evalAsync (
196+ ProtoMessageActivationFactory .fromProto (message , program .options ()),
197+ CelFunctionResolver .EMPTY ,
198+ /* partialVars= */ null );
199+ }
200+
215201 @ Override
216202 public Object trace (CelEvaluationListener listener ) throws CelEvaluationException {
217- return ((PlannedProgram ) program )
218- .trace (GlobalResolver .EMPTY , EMPTY_FUNCTION_RESOLVER , null , listener );
203+ return program .trace (GlobalResolver .EMPTY , CelFunctionResolver .EMPTY , null , listener );
219204 }
220205
221206 @ Override
222207 public Object trace (Map <String , ?> mapValue , CelEvaluationListener listener )
223208 throws CelEvaluationException {
224- return (( PlannedProgram ) program )
225- . trace ( Activation .copyOf (mapValue ), EMPTY_FUNCTION_RESOLVER , null , listener );
209+ return program . trace (
210+ Activation .copyOf (mapValue ), CelFunctionResolver . EMPTY , null , listener );
226211 }
227212
228213 @ Override
229214 public Object trace (Message message , CelEvaluationListener listener )
230215 throws CelEvaluationException {
231- PlannedProgram plannedProgram = (PlannedProgram ) program ;
232- return plannedProgram .evalOrThrow (
233- plannedProgram .interpretable (),
234- ProtoMessageActivationFactory .fromProto (message , plannedProgram .options ()),
235- EMPTY_FUNCTION_RESOLVER ,
216+ return program .evalOrThrow (
217+ ProtoMessageActivationFactory .fromProto (message , program .options ()),
218+ CelFunctionResolver .EMPTY ,
236219 /* partialVars= */ null ,
237220 listener );
238221 }
239222
240223 @ Override
241224 public Object trace (CelVariableResolver resolver , CelEvaluationListener listener )
242225 throws CelEvaluationException {
243- return ((PlannedProgram ) program )
244- .trace (
245- (name ) -> resolver .find (name ).orElse (null ),
246- EMPTY_FUNCTION_RESOLVER ,
247- null ,
248- listener );
226+ return program .trace (
227+ (name ) -> resolver .find (name ).orElse (null ), CelFunctionResolver .EMPTY , null , listener );
249228 }
250229
251230 @ Override
@@ -254,12 +233,8 @@ public Object trace(
254233 CelFunctionResolver lateBoundFunctionResolver ,
255234 CelEvaluationListener listener )
256235 throws CelEvaluationException {
257- return ((PlannedProgram ) program )
258- .trace (
259- (name ) -> resolver .find (name ).orElse (null ),
260- lateBoundFunctionResolver ,
261- null ,
262- listener );
236+ return program .trace (
237+ (name ) -> resolver .find (name ).orElse (null ), lateBoundFunctionResolver , null , listener );
263238 }
264239
265240 @ Override
@@ -268,23 +243,22 @@ public Object trace(
268243 CelFunctionResolver lateBoundFunctionResolver ,
269244 CelEvaluationListener listener )
270245 throws CelEvaluationException {
271- return (( PlannedProgram ) program )
272- . trace ( Activation .copyOf (mapValue ), lateBoundFunctionResolver , null , listener );
246+ return program . trace (
247+ Activation .copyOf (mapValue ), lateBoundFunctionResolver , null , listener );
273248 }
274249
275250 @ Override
276251 public Object trace (PartialVars partialVars , CelEvaluationListener listener )
277252 throws CelEvaluationException {
278- return ((PlannedProgram ) program )
279- .trace (
280- (name ) -> partialVars .resolver ().find (name ).orElse (null ),
281- EMPTY_FUNCTION_RESOLVER ,
282- partialVars ,
283- listener );
253+ return program .trace (
254+ (name ) -> partialVars .resolver ().find (name ).orElse (null ),
255+ CelFunctionResolver .EMPTY ,
256+ partialVars ,
257+ listener );
284258 }
285259
286260 @ Override
287- public Object advanceEvaluation (UnknownContext context ) throws CelEvaluationException {
261+ public Object advanceEvaluation (UnknownContext context ) {
288262 throw new UnsupportedOperationException ("Unsupported operation." );
289263 }
290264 };
@@ -347,6 +321,10 @@ public abstract Builder setAsyncEvaluationOptions(
347321 @ Override
348322 public abstract CelValueProvider valueProvider ();
349323
324+ abstract CelAsyncEvaluationOptions asyncEvaluationOptions ();
325+
326+ abstract Optional <ListeningExecutorService > asyncExecutor ();
327+
350328 abstract CelStandardFunctions standardFunctions ();
351329
352330 abstract ExtensionRegistry extensionRegistry ();
@@ -604,7 +582,10 @@ public CelRuntime build() {
604582 celValueConverter ,
605583 container (),
606584 options (),
607- lateBoundFunctionNamesBuilder ().build ());
585+ lateBoundFunctionNamesBuilder ().build (),
586+ runtimeEquality ,
587+ asyncEvaluationOptions (),
588+ asyncExecutor ().orElse (null ));
608589 setPlanner (planner );
609590
610591 setFunctionBindings (ImmutableMap .copyOf (mutableFunctionBindings ));
0 commit comments