Releases: cel-expr/cel-java
Release list
v0.14.0
This release officially introduces formal verification capabilities to CEL-Java, adds aggregate evaluation semantics to the CEL Policy Compiler, advances runtime modernization with the Program Planner, and brings key optimizer performance gains, conformance updates, and bug fixes.
🛡️ Formal Verification Framework
We are proud to announce the open-sourcing of the CEL Java Verifier (dev.cel:verifier and dev.cel:verifier-cli) (#1123, #1166). The verifier allows users to mathematically prove safety invariants, logical equivalence, satisfiability, and validity across CEL expressions and structured CEL Policies.
- Read the Announcement Blog Post: Securing the Agentic Era: Introducing Formal Verification for CEL
- Watch the Video Demo: YouTube Video Walkthrough
- Read the Documentation: CEL Java Verifier README & CLI/REPL Guide
Key Verifier Capabilities
- Logical Equivalence & Safe Refactoring: Statically prove that two ASTs or CEL Policies are semantically identical for all possible input states (#1123, #1125, #1164).
- Satisfiability & Validity with Counterexample / Witness Generation:
- Custom Policy Invariants Verification: Allows policy authors to declare
assumepreconditions andassertclauses in CEL YAML policies and prove that safety invariants are never violated (#1128, #1144). - Bounded Model Checking (BMC): Unrolls and verifies list and map comprehensions (
all,exists,map,filter) up to configurable unroll limits (#1129, #1132, #1174). - Rich Type Reasoning: Supports cross-type numeric comparisons (#1124),
timestampanddurationarithmetic/axioms (#1153), optional types and traversal (#1131, #1135, #1138, #1146), uninterpreted conversions (#1154, #1155), and JSON unwrapping (#1147). - Interactive CLI & REPL Tool: Available as a standalone executable JAR (
dev.cel:verifier-cli) and interactive REPL shell for ad-hoc inspection and CI/CD validation (#1159, #1160, #1168).
🚀 Highlights & New Features
- Aggregate Semantics in CEL Policy: Added support for aggregate policy rules to the CEL Policy Compiler according to the CEL Policy Specification (#1052, #1175), #1187). Aggregate rules evaluate all matching rules (including nested subrules) and collect results into a flattened list with support for optional pruning.
- Shorthand Type Specifiers for Policy Configurations: Added support for inline shorthand type specifiers in CEL environment YAML configs (#1185), allowing parameterized types such as
map<string, int>,list<string>, andoptional<T>to be declared as compact strings rather than verbose nested YAML structures. - Protobuf Message Constant Folding:
ConstantFoldingOptimizernow supports inlining evaluated Protobuf messages into structured message literal AST nodes, preserving field values and nested messages (#1116). - Parser Expression Node Limits: Added configurable node limits during parsing to prevent deeply nested or malicious expressions from exhausting resources (#1148).
⚙️ Runtime & Optimizer Improvements
- Planner Migration & Default Documentation: Documentation and CEL-Java codelabs have been updated to make the Program Planner the default recommendation (#1109). Standard CEL builders have shifted to proxy the legacy runtime (#1110), and the Lite Runtime has also been migrated to the Program Planner (#1119).
⚠️ Deprecation Notice: The legacy runtime will be deprecated in the next release. Callers are strongly urged to migrate to the Program Planner. - Pre-Order Constant Folding: Switched constant folding optimizer traversal from post-order to pre-order (#1097). By traversing top-down, the optimizer avoids evaluating and visiting subtrees that can already be folded or pruned at higher ancestor nodes, resulting in significant performance speedups on large ASTs.
- Optional Macro & Aggregate Literal Folding: Added constant folding support for optional macro calls (#1105) and aggregate literal pruning (#1106).
- Optimization Helpers & Validation: Introduced common helpers for fixed-point optimization passes and AST navigation (#1170, #1176), and added a validation pass to ensure AST ID uniqueness across optimizers (#1178).
🐛 Bug Fixes & Correctness
- Program Planner Partial Evaluation: Fixed a bug in the execution plan to properly handle
AccumulatedUnknownsduring partial evaluation (#1158). - Constant Folding Fixes:
- Macro Iteration Variable Validation: Stricter validation for iteration variables in standard macros (
all,exists,map,filter) to disallow identifiers starting with.and prevent collisions with internal__result__accumulator variables (#1096). - Conformance & Type Fixes:
- Optional Target Handling: Avoided unnecessary copying of complex targets in
optMapandoptFlatMap(#1149).
👏 New Contributors
- @stanleyhy made their first contribution adding Protobuf constant folding (#1116) and fixing
AccumulatedUnknownshandling in the planner (#1158).
Full Changelog: v0.13.1...v0.14.0
v0.13.1
This minor release brings expanded support for Native Extensions, and correctness fixes for optionals, protobuf types and policy evaluation.
🚀 Highlights & New Features
- Native Extensions: Expanded support to include arrays for Native type extensions (#1069).
🛠️ Configuration & Default Changes
- Deprecations: The
enableCelValueoption has been deprecated (#1057).
🐛 Bug Fixes & Correctness
- Protobuf Conversion: Updated
ProtoCelValueConverterto correctly handleFIXED32andFIXED64as unsigned values (#1073). - Native Extensions: Safely ignored enums in native type extensions to prevent evaluation errors (#1078).
- Policy Dead Code: Fixed dead code reachability logic that was erroneously flagging on unconditional nested rules (#1072).
- Optional Types: Ensured that chained optional field selection does not repeatedly wrap the optional type (#1086).
👏 New Contributors
- @andrewparmet made their first contribution fixing
FIXED32/FIXED64unsigned handling in #1073
Full Changelog: v0.13.0...v0.13.1
v0.13.0
This release brings significant performance optimizations, robust support for parsed-only evaluation across standard extensions, and several important bug fixes to align behavior with other CEL implementations. It also introduces major enhancements to the planner and policy compilation.
🚀 Highlights & New Features
- Planner Promotion & Enhancements: The planner runtime builder has been officially promoted from experimental to the main factories (#1033). Note: This planner runtime will become the default in a future release. Additionally, the planner now supports trace (#1031), exhaustive evaluation (#1032), and partial evaluation via unknowns (#982).
- Native Extensions: We are thrilled to introduce Native Extensions (#1037), a powerful new feature that allows you to seamlessly bind and evaluate native Java objects and functions directly within your CEL environment. This drastically reduces boilerplate and avoids the overhead of converting your Java types into intermediate representations. Please refer to the documentation here.
- Parsed-Only Evaluation Support: Broadened parsed-only evaluation support and test coverage across all standard extensions, including Proto (#1015), Comprehensions (#1018), Lists (#1016), Math (#1011), Sets (#1021), Encoders (#1020), Bindings (#1014), and Strings (#1019).
- New String Extensions: Added
quoteandreverseto the string extensions library (#998).string.splitwas also changed to return an immutable list (#1019). - Policy Improvements: Introduced the CEL Policy Conformance Test Runner for Java and enabled it in OSS (#1043, #1053), added support for context variables in the YAML environment (#1046), and allowed specifying a set of optimizers to run during policy compilation (#986).
⚡ Performance Improvements
We have invested heavily in optimizing the performance characteristics of the planner runtime compared to the legacy runtime (#999, #1000, #1001, #1002, #1003, #1041). Benchmark highlights include:
- Massive CPU Speedups: Drastic execution time cuts, especially for expressions involving comprehensions (up to an 88% reduction). When caching programs, non-protobuf operations see up to a 92% improvement (e.g., execution dropping from 77µs down to 10µs).
- Significant GC Pressure Reduction: Elimination of unnecessary temporary object allocations results in up to a 99% memory footprint reduction for loops and list creation (e.g., dropping from 160 KB down to just 1 KB for cached, type-checked programs).
- Evaluation Nuance: For non-protobuf work evaluated on-the-fly, execution is 40%–80% faster with a 60%–97% memory savings. For deep protobuf field selections, the planner introduces a negligible, fractional microsecond overhead due to the new planning lifecycle.
🛠️ Configuration & Default Changes
- Quoted Identifiers: Quoted identifiers are now enabled by default (#997).
- Timestamp Epoch:
enableTimestampEpochis now set by default (#989), and the configuration option has been deprecated (#991).
🐛 Bug Fixes & Correctness
- Math Consistency: Fixed
math.roundto useHALF_UPto match documentation and align behavior withcel-goandcel-cpp(#1054). Removed signed long support foruint(#1011). - CEL Null Handling: Fixed null assignability for repeated and map fields (#981)
- Evaluation Fixes:
- Fixed partial evaluation to properly check for comprehension bound variables in the planner (#1004).
- Fixed constant folding to prevent errors when sub-ASTs contain unbound variables (#1005).
- Fixed JSON field name resolution for shadowed cases (#995).
- Fixed
accu_initto be lazily initialized in the folder (#1014). - Fixed a nested rule issue in policies (#1039).
- Error Reporting: Function failures (dispatch/overload match) now always include the function name (#1024). Tracked incompatible output types to provide more accurate error reporting (#1050).
- YAML/Serialization: Various fixes applied to
CelEnvironment, YAML parsing, and serialization (#987), including using structured types in YAML exports (#983).
👏 New Contributors
A warm welcome and thank you to our new contributors for this release!
- @pkwarren made their first contribution adding string extensions (
quote,reverse) in #998 - @rayokota made their first contribution fixing
math.roundrounding behavior in #1054
Full Changelog: v0.12.0...v0.13.0
v0.12.0
Features
- Introduced the Program Planner (Experimental) to eventually back the CEL runtime. The planner allows evaluation of parsed-only expressions (#276), and is designed to improve evaluation speed when planned programs are cached.
- InliningOptimizer has been added to allow inlining variables within an AST. It replaces variable references with their corresponding expressions, automatically rewrites presence tests (e.g.,
has()macros), and supports recursive inlining based on variable dependency ordering. - Added support for Protobuf
json_namefield options. When enableJsonFieldNames option is enabled, the compiler will exclusively accept thejson_nameand no longer recognize the original protobuf field name. To maintain backwards compatibility, the runtime continues to support both the original name and thejson_namewhen resolving fields. - Expanded the CEL Environment YAML import/export capabilities to include shared feature flags and common limits (#970) (#971).
Breaking Changes
- PR #820 Enables
evaluateCanonicalTypesToNativeValuesby default. See previous release for details. - PR #943 removes
StringConversion,StringConcatenation, andListConcatenationfromCelOptionsin favor of standard library subsetting viaCelStandardDeclarationsandCelStandardFunctions. - PR #875 removes null assignability to function arguments for Protobuf messages.
Bug fixes
- Fixed a regression reported in #890 for Protobuf timestamp/duration field values to reside outside RFC3339 range in #893.
- Prevent non-foldable functions from being folded in comprehensions in #937
- Fixed context propagation in
AsyncProgramImplto preserve resolved attributes in #913. - Fixed type-checker to search local scopes for identifiers before container resolution in #910.
- Fixed type-checker and runtime to properly resolve global escaped identifiers in #917.
- Fixed argument matching to validate all args for non-strict functions in #855.
- Fixed source locations in error messages for maps, comprehensions, and missing attributes in #921 and #962.
- Fixed null assignment to fields in #979.
What's Changed
Environment & Policy Compiler
- Add support for container aliases to CelEnvironment in #900
- Add a shorthand for declaring policy variables in #944
Optimizations & Internals
- Accumulate unknowns into a set to avoid intermediate duplication in #864
- Support constant folding in chained SELECT expressions in #886
- Optimize
list.distinct()in #902 - Use mutable expressions for AST rewrites during type-check in #936
- Invert the nesting level sequencing when mangling comprehension identifiers in #942
- Remove unnecessary synchronization on dispatcher by making it immutable in #851
- Persist lazily bound variables in the correct scoped resolver in #881
Miscellaneous
- Add conformance tests for planner in #973
- Migrate to new GeneratorNames library for java codegen naming in #882
- Properly establish cross dependencies across maven artifacts in #954
- Add isolated artifact tests for dev.cel:compiler and dev.cel:runtime in #959
- OSS Fix for Bazel 9 in #924
- Upgrade GitHub Actions for Node 24 compatibility by @salmanmkc in #896
New Contributors
- @salmanmkc made their first contribution in #896
Full Changelog: v0.11.1...v0.12.0
v0.11.1
Significant changes
- CEL-Java evaluates the following expressions to their proto equivalent form:
timestamp(100) -> google.protobuf.Timestamp
duration("1h") -> google.protobuf.Duration
Starting with this release, the runtime can evaluate these literals to the following Java native type equivalents:
timestamp(100) -> java.time.Instant
duration("1h") -> java.time.Duration
This new behavior is not yet enabled by default. Call CelOptions.Builder.evaluateCanonicalTypesToNativeValues(true) to explicitly enable it.
- Previously only identifiers containing a period were allowed to be aliased. This constraint has been removed, so the following aliasing is now allowed:
CelContainer.newBuilder().addAlias("short", "really_long_package_name").build();
What's Changed
Features
- Evaluate CEL's timestamp and duration types to their native equivalent values in #790
- Relax constraint for fully qualifying a package name when aliasing in #837
Optimizations
- Enhance CSE to handle two variable comprehensions in #808
- Override environment's expected result type during constant folding in #815
- Allow constant folding to fold equals operator in #822
- Enhance ConstantFoldingOptimizer to fold arithmetics involving timestamps and durations in #825
Safety
- Add comprehension nesting validator. in #829
Bug fixes
- Fixed negative zero comparison.
"0.0 == -0.0"now evaluates totrue - Fixed FileDescriptorSetConverter to always reference WellKnownTypes descriptors from generated ones in #833
- Fixed bytes(string) standard function to respect evaluateCanonicalTypesToNativeValues flag in #828
Testing infra
- Setup of the coverage index. in #811
Miscellaneous
- Renaming the CelComprehensionsExtensions docs to align more closely with lib implementation in #807
- Remove capability to serially increment mangled variable indices in #806
- Add an overload for
CelMutableExpr.ofComprehension. in #812 - Fix Typo: "descedent" to "descendent". in #827
- Include comprehensions in CelEnvironment in #838
- Update evaluateCanonicalTypesToNativeValues documentation and fix tests in #840
Full Changelog: v0.11.0...v0.11.1
v0.11.0
Features
- Introduced a new extension library for Two-variable comprehensions support
- (example:
<list>.all(indexVar, valueVar, <predicate>) -> bool)
- (example:
- Added support for type name Aliasing and Abbreviations to perform name resolution across multiple namespaces.
- CEL Policy Compiler now supports the
importskeyword to abbreviate type names. - Added the capability to export a CEL environment, including its standard libraries and extensions, into YAML.
- Expanded the lists extension library with new functions:
slice,distinct,reverse,sort, andsortBy.
Breaking Changes
-
PR #769 removes
setContainer(String)method on theCel,CelCompiler, andCelCheckerbuilders. Callers must usesetContainer(CelContainer)instead, which supports aliasing and abbreviations in addition to existing container resolution. For a migration that preserves existing behavior, simply provideCelContainer.ofName(string). -
PR #789 changes the internal representation of CEL's
nullandbytesliterals (e.g.,b'foo') to their CEL-native Java type equivalents (dev.cel.common.Values.NullValueanddev.cel.common.values.CelByteString) instead of their Protobuf counterparts (com.google.protobuf.NullValueandcom.google.protobuf.ByteString). This is currently a breaking change only if your codebase references these literals through theCelConstantAST node. There are no observable changes in evaluation behavior, as this is currently controlled by a feature flag. We plan on enabling this by default in a future release.
Bug fixes
- Fixed the filter/map macro to be linear in time and space complexity in #746.
- Fixed unknown merging to be linear in space complexity when referenced in binds in #770.
- Prevented comprehension identifiers from being mangled if the AST was not optimized in #792.
- Fixed
replaceSubtreeto properly populate source info for the three-argument map macro in #794. - Corrected
CelContainer.toBuilder()to properly copy aliases in #775. - Excluded protobuf-javalite from the public artifacts for CEL in #777.
What's Changed
Aliasing and Abbreviations
CEL Policy Compiler
- Optimize composed policies using Constant Folding and Common Subexpression Elimination in #793
- Add display_name field to CelPolicy.Variable element in #741
- Adding description and display name at Cel Policy level in #744
- Support for typename import aliases in policy compiler in #771
CEL Environment
- Add support for stdlib subsetting via CelEnvironment in #736
- Add support for macro inclusion/exclusion to CelEnvironmentExporter in #756
- Add support for extension versions in #739
- Implement CelEnvironmentExporter in #753
- Update the "encoders" extension to be compatible with CelEnvironmentExporter in #763
- Update the "protos" extension to be compatible with CelEnvironmentExporter in #764
- Update the "regex" extension to be compatible with CelEnvironmentExporter in #765
- Update the "sets" extension to be compatible with CelEnvironmentExporter in #766
- Update the "strings" extension to be compatible with CelEnvironmentExporter in #767
- Update "bindings" extension to be compatible with CelEnvironmentExporter in #762
- Add versions to the 'optional' library to gradually expose new functions in #747
- Refactor CelExtensionLibrary to centralize version definitions in #761
Extensions
- Checker and parser changes to support comprehensionsV2 in #778
- Checker and parser changes to support two variable comprehensions for remaining Macros in #796
- Introduce 'list' extension functions: 'slice', 'distinct', 'reverse', 'sort', 'sortBy' in #740
- AST changes to support two variable comprehensions in #772
- Adding runtime support for two variable comprehensions in #799
- Adding
transformMapandtransformMapEntrymacros in #800 - Updating the README.md with CelComprehensionsExtensions docs in #801
Miscellaneous
- Internally accumulate unknowns to a mutable list in #750
- Migrate to Bzlmod in #328
- Support triggering runner library programmatically in #725
- Run conformance tests against published maven JARs in #788
- Add missing entries to REVERSE_OPERATORS in #798
- Remove cel.bind option from SubexpressionOptimizer in #795
Full Changelog: v0.10.1...v0.11.0
v0.10.1
This release features the following:
- New Android-Optimized Runtime (Beta): Introducing a lightweight runtime with native support for Protobuf Lite, significantly reducing footprint for Android applications.
- Expanded Extension Libraries: New Regular Expression extension library is now available, alongside enhanced Math extensions including floor, ceil, round, and bitwise operators.
- CEL Unit test runner framework: Allows exercising tests for CEL expressions and policies via Bazel macros.
- YAML Environment Serialization: Support for a bi-directional CEL environment serialization in YAML for improved configuration management.
Breaking Changes
The following PRs change the fully qualified class name for function binding:
Before: dev.cel.runtime.CelRuntime.CelFunctionBinding
After: dev.cel.runtime.CelFunctionBinding
- Rename dev.cel.runtime.CelRuntime.CelFunctionBinding to dev.cel.runtime.CelFunctionBinding in #627
- Remove deprecated dev.cel.runtime.CelRuntime.CelFunctionBinding in #628
Various utility methods for spawning protobuf-based CEL types have been moved out of CelTypes into CelProtoTypes or CelProtoMessageTypes:
- Migrate from CelProtoTypes#createMessage(descriptor) to CelProtoMessageTypes#createMessage(descriptor) in #568
- Remove deprecated CelProtoTypes#createMessage in #573
- Create CelProtoMessageTypes for handling proto based types that require a full protobuf dependency in #567
CelPolicyConfig and its sibling classes have been removed. These classes are superseded by CelEnvironment, which are functionally equivalent and provides functionality for environment setup beyond policy use cases.
- Remove deprecated CelPolicyConfig and its parser in #618
Bug Fixes
- Include CEL Policy Compiler in next release's jar #678
- Fix an issue with the error message not including the source location and position during function dispatch in #569
- Fix JSON conversions involving FieldMask and Empty in #644
- Fix a fuzzer issue involving nested comprehensions in #655
- Fixing lastIndexOf incosistent behaviour in #681
- Fix bytes to string conversion to explicitly error on invalid code points in #717
- Fix optional or/orValue to propagate errors and unknowns in #718
- add string(bool) overload by @maorwayn in #728
- Enable updated accumulator variable for CEL-Java parser by default. in #537
What's Changed
Extension libraries
- Implement math extension functions for floor, ceil, etc in #650
- Porting lists.range() to Java Stack in #685
- Adding the CEL regex extensions in #708
- Updating Regex ext to align with Google SQL and Adding Regex documentation in #722
- Aligning replace function in Regex ext with Google SQL in #724
YAML serialization
Lite Runtime (Android)
- Add rules_android to WORKSPACE, add cel_android_library bzl macro in #583
- Bring in android artifacts for guava and protobuf in WORKSPACE in #584
- Implement interfaces for CelLiteRuntime. Add Android runtime tests in #615
- Assert allowed CelOptions during CelLiteRuntime environment construction in #619
- Split ProtoAdapter into ProtoLiteAdapter to adapt lite messages in #636
- Bring in WORKSPACE dependencies for supporting CelLiteDescriptor codegen in #647
- Add interpreter test for protolite messages in #656
- Implement codegen for CelLiteDescriptor in #659
- Add CelLiteDescriptorPool and DefaultLiteDescriptorPool in #664
- Add ProtoMessageLiteValue and ProtoLiteCelValueConverter in #666
- Perform field selections on lite messages by reading from the wire format in #668
- Add ProtoMessageLiteValueProvider in #669
- Rename CelLiteRuntimeTest to CelLiteRuntimeAndroidTest in #671
- Add an interface for accepting CelValueProvider in lite runtime in #672
- Add protolite tests for Android in #673
- Add BaseProtoMessageValueProvider to decouple full/lite protobuf value providers in #674
- Handle unknown fields in messagelite in #683
- Rename CelFieldValueType to EncodingType in #684
- Derive the java class name for CelLiteDescriptor in #687
- Handle dependent protos when generating CelLiteDescriptor in #692
- Add late bound function resolver to lite runtime's program interface in #693
- Expose Late function bindings target for Android. in #698
- Allow resolution of proto messages from dyn-typed functions in lite runtime in #700
- Add
@Generatedannotation to codegened CelLiteDescriptor. Fix package location error prone warning for generated sources within srcjar. in #704 - Separately generate lite descriptors per message in #705
- Decouple CelTypeResolver from full protobuf implementation in #590
- Add DefaultInstanceMessageLiteFactory in #630
- Decouple ProtoCelValueConverter into BaseProtoCelValueConverter in #660
- Partition CEL standard functions per function definition in #707
- Remove extraneous protoTypeName argument from RuntimeTypeProvider interface in #706
- Add an additional messageName argument to MessageProvider interface in #662
- Add toRuntimeBuilder to CelLiteRuntime in #620
Test runner framework
Miscellaneous
- Split CelEvaluationException from runtime build target in #555
- Remove deprecated ExprFeatures in #557
- Allow AsyncProgram to accept an async resolver for an attribute in #711
- Create a builder for CelEvaluationException in #561
- Replace InterpreterExceptions with CelEvaluationException in the runtime path in #564
- Remove InterpreterException in #565
- Update CelUnparser and open up visibility so that inheriting class can use it in #556
- Upgrade to Bazel 8, upgrade protobuf-java to 4.29.3 in #582
- Explicitly set locale for String.format calls in #577
- Enable conformance tests in #596
- Add CelCompilerTool java binary and compile_cel bzl library in #594
- Add empty binder to GlobalResolver in #586
- fixed typo in README.md by @tobiKaboom in #599
- Add capability to accept a CEL environment in CelCompilerTool in #611
- Surface ExprId in CelIssue in #604
- Add test coverage for overlapping overloads and invalid struct creation in #608
- Decouple Activation from full protobuf implementation in #614
- Change default java toolchain and build from 8 to 11. Add separate CI for Java 8 builds in #616
- Augment runtime's toBuilder method to reinstantiate a builder from stored artifacts in #623
- Change WellKnownProto to lookup a descriptor by its type name. Add google.protobuf.Empty and google.protobuf.FieldMask to WKP in #626
- Drop support for java.lang.long uint support in CelValue in #663
- Make UnspecifiedType abstract in #676
- Fork timestamp/duration protobuf u...
v0.9.1
Note
If you encounter any compatibility issues with protobuf-java 4.x, use CEL-Java version 0.9.1-proto3 as a workaround. This is the same version as CEL-Java 0.9.1 with protobuf dependency pinned to 3.25.5.
What's Changed
- Add support for quoted field selectors in java. in #544
- Add CelOptions for designating Regex program size in #550
Miscellaneous
- Retain the original identifier during parse when quoted identifier is disabled in #547
- Create a separate maven artifact for adapting canonical CEL protos (CelProtoAbstractSyntaxTree,
dev.cel:protobufmaven coordinate) in #551 - Isolate CelAbstractSyntaxTree and CelSource from common build target in #552
Full Changelog: v0.9.0...v0.9.1
v0.9.0
Note
If you encounter any compatibility issues with protobuf-java 4.x, use CEL-Java version 0.9.0-proto3 as a workaround. This is the same version as CEL-Java 0.9.0 with protobuf dependency pinned to 3.25.5.
Breaking Changes
In an effort to make protobuf an optional dependency in CEL-Java, the following PR changes the resolution of type(expr) from proto based cel.expr type value into native equivalent dev.cel.common.types.CelType:
- Expose CelType as a native representation for runtime type value. in #505
The following PR changes the resolution of unknown values from cel.expr unknown expr value into native equivalent dev.cel.runtime.CelUnknownSet:
- Enable adaptUnknownValueSetToNativeType by default in CelOptions in #490
- Remove adaptUnknownValueSetToNativeType flag from CEL in #496
The following PR removes previously deprecated methods that deal with canonical CEL expr values from CelTypes and CelAbstractSyntaxTree classes. The removed methods have been moved to CelProtoAbstractSyntaxTree and CelProtoTypes:
- Create CelProtoTypes utility class to handle CelExpr in proto format in #524
- Remove deprecated methods in CelTypes in #531
- Remove deprecated CelAbstractSyntaxTree#getProtoResultType in #533
What's Changed
- Add CelStandardDeclaration to allow environment subsetting for type-checker in #448
- Add CelStandardFunctions to allow environment subsetting for the runtime in #461
- Introduce late-bound functions into CEL-Java in #494
- Add option to enable updated accumulator variable. in #538
- Add CelOptions to disable string conversion and list/string concatenation in #506
- Add CelOptions to disable comprehension in #507
Fixes
- Enforce strictness of type function #474
- Fix macro parsing with receiver style args by @oridag in #481
- Use an immutable copy of
DefaultDispatcherto avoid synchronization in #477
Miscellaneous
-
Remove unused test_java_proto package in #526
-
Remove reference to CheckedExpr proto in DefaultMetadata in #521
-
Migrate CelAttributeParser away from proto based expr to canonical cel expr in #522
-
Add expr ID set as a field to CelUnknownSet. in #471
-
Add a policy example that compiles then evaluates late bound functions in #497
-
Migrate dev/cel/common/ tests to use proto3 canonical conformance protos follow up will address proto2. in #512
-
Migrate dev/cel/extensions tests to use canonical conformance protos. in #513
-
Remove unnecessary unknown value adaptation in ProtoAdapter in #499
-
Migrate away from deprecated CelTypes methods in #525
-
Remove the legacy createInterpretable(CheckedExpr) in #487
-
Update runtime tests to refer to canonical cel conformance protos. in #510
-
Correctly suppress AutoValueMutable warnings in #475
-
Deprecate enableUnsignedLong option. Remove associated base interpreter tests. in #515
-
Cleanup of unused methods and build targets in #469
-
Move evaluateExpr utility methods to validator and optimizer in #470
-
Update WORKSPACE dependencies in #530
-
Remove references to deprecated type resolvers in the runtime. in #520
-
Remove retainComprehensionStructure flag in SubexpressionOptimizer in #493
New Contributors
Full Changelog: v0.8.0...v0.9.0
v0.8.0
Fixes
- Fix CEL-Java to be fully protobuf v4 compatible in #466
- Ensure empty YAML inputs yield checked exceptions #463
Features
- Add optional.unwrap in #438
Miscellaneous
- Expose CelPolicyValidationException constructors in #450
- Make CelAbstractSyntaxTree and its dependents an AutoValue class to allow for equality checks in #458
- Additional test case and error message refinement in #464
Full Changelog: v0.7.1...v0.8.0