Add CDI 5.0 Beta1 support#32
Draft
graemerocher wants to merge 14 commits into
Draft
Conversation
There was a problem hiding this comment.
Pull request overview
This pull request drafts ODI support for CDI 5.0.0.Beta1 by updating CDI/TCK coordinates and implementing CDI Lite-facing API/SPI deltas (new annotations, build-compatible extension changes, invoker async handler support, and lang-model updates) required to run the CDI 5 Lite TCK.
Changes:
- Update build and TCK runner wiring to CDI 5 Beta1 artifacts (including signature test and suite generation).
- Add CDI 5 annotation semantics and resolution behavior (
@Eager,@Reserve,@AutoClose) across processor and runtime. - Implement CDI 5 BCE and invoker-related runtime/processor features (synthetic injections, async handler discovery, record/sealed lang-model support, defensive copies).
Reviewed changes
Copilot reviewed 56 out of 56 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tck-runner/src/main/java/org/eclipse/odi/tck/util/BeanManagerFactory.java | Align BeanManager shim with CDI 5 API (EL methods removed, unwrapClientProxy added). |
| tck-runner/src/main/java/org/eclipse/odi/tck/arquillian/ArchiveCompiler.java | WAR compilation/resource copying and async handler discovery support for TCK runs. |
| tck-runner/build.gradle.kts | CDI 5 Beta1 signature artifact handling and TestNG suite generation/exclusions. |
| src/main/docs/guide/setup.adoc | Update docs dependency snippets to CDI 5 Beta1 coordinates. |
| src/main/docs/guide/buildTimeExtensions.adoc | Update docs dependency snippets to CDI 5 Beta1 coordinates. |
| README.md | Update top-level dependency snippet to CDI 5 Beta1 coordinates. |
| processor-cdi/src/test/java/org/eclipse/odi/cdi/processor/extensions/BuildCompatibleFaultToleranceOperationProvider.java | Add tests asserting defensive copying of synthetic parameter arrays. |
| processor-cdi/src/test/java/org/eclipse/odi/cdi/processor/extensions/BuildCompatibleFaultToleranceExtension.java | Mutate arrays post-registration to verify defensive copy behavior. |
| processor-cdi/src/test/java/org/eclipse/odi/cdi/processor/extensions/BuildCompatibleExistingCircuitBreakerNames.java | Add tests asserting defensive copying of synthetic parameter arrays. |
| processor-cdi/src/test/java/org/eclipse/odi/cdi/intercept/JakartaInterceptorAdapter.java | Support both jakarta and javax interceptor InvocationContext. |
| processor-cdi/src/test/groovy/org/eclipse/odi/cdi/processor/InterceptorSpec.groovy | Add interceptor-binding-with-member regression test. |
| processor-cdi/src/test/groovy/org/eclipse/odi/cdi/processor/extensions/MockParamCreator.java | Ensure parameter array values are defensively copied when read. |
| processor-cdi/src/main/resources/META-INF/services/io.micronaut.inject.visitor.TypeElementVisitor | Register new CDI 5 annotation visitor. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/ProducesVisitor.java | Propagate @Reserve metadata and conditions for producer members. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/NamedVisitor.java | Update bean-name ambiguity resolution to account for enabled/priority/reserve. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/InterceptorBindingVisitor.java | Handle constructor interception and nonbinding members metadata for bindings. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/InjectVisitor.java | Move @Inject validation to class scan for consistency across languages. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/DisposesMethodVisitor.java | Allow disposer to match producer field as well as producer method. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/visitors/Cdi5AnnotationVisitor.java | New visitor to implement @Eager, @Reserve, @AutoClose metadata/validation. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/mappers/EagerMapper.java | Map CDI @Eager to Micronaut eager initialization metadata. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/SyntheticBeanBuilderImpl.java | Add CDI 5 synthetic bean flags and synthetic injection point registration. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/RecordComponentInfoImpl.java | Implement record component lang-model adapter. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/MetaAnnotationsImpl.java | Disallow custom contexts for built-in scopes with clearer failure. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/InvokerValidationImpl.java | Implement CDI 5 invoker validation for async handlers. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/ClassInfoImpl.java | Add sealed/permitted subclasses and record component support. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/BuildTimeExtensionVisitor.java | Add veto handling, async handler validation, normal-scope proxy metadata. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/BuildTimeExtensionRegistry.java | Add async handler discovery/validation and synthetic injection point validation. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/BuildTimeExtensionBeanVisitor.java | Register synthetic injection descriptors and handle CDI 5 creator/disposer signatures. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/BeanInfoImpl.java | Expose CDI 5 bean metadata (reserve/eager/autoClose) to BCE SPI. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/extensions/AbstractSyntheticBuilder.java | Defensive copies for array-valued synthetic parameters at registration time. |
| processor-cdi/src/main/java/org/eclipse/odi/cdi/processor/CdiUtil.java | Update enablement/resolution logic for reserve/priority and wildcard checks. |
| gradle/mn.libs.versions.toml | Add Micronaut reactive module alias. |
| gradle/libs.versions.toml | Switch CDI artifacts to jakarta.cdi:* and bump CDI version to 5.0.0.Beta1. |
| core/src/main/java/org/eclipse/odi/cdi/OdiSyntheticParameters.java | Defensive copies when storing synthetic parameter maps; add new parameter keys. |
| core/src/main/java/org/eclipse/odi/cdi/OdiSyntheticInjectionPoint.java | New runtime descriptor for synthetic injection points. |
| core/src/main/java/org/eclipse/odi/cdi/OdiExecutableInvokerInfo.java | Defensive copies for parameter metadata arrays + async handler metadata fields. |
| cdi/src/test/java/org/eclipse/odi/cdispec/_32/_2/NullProducerScopeTest.java | Add regression test for null producer + normal scope behavior. |
| cdi/src/test/java/org/eclipse/odi/cdi/OdiExecutableInvokerInfoTest.java | Add regression test for defensive copying of invoker metadata arrays. |
| cdi/src/main/java/org/eclipse/odi/cdi/SyntheticDisposer.java | Support CDI 5 SyntheticInjections disposer signature + @AutoClose synthetic closing. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiUtils.java | Centralize synthetic parameter lookup and defensively copy arrays on read/convert. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiSyntheticInjections.java | New runtime SyntheticInjections implementation with dependent lifecycle management. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiSeContainerInitializer.java | Add CDI 5 addBuildCompatibleExtensions(...) method (unsupported at runtime) + eager init call. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiSeContainer.java | Initialize @Eager beans and provide SyntheticInjections bean factory. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiReactiveStreamsSupport.java | Optional reactive-streams completion bridge for dependent destruction. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiInstanceImpl.java | Add reserve/priority selection logic and support dynamic InjectionPoint when needed. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiExecutableInvokerExecutor.java | Add async handler execution path with dependent-context lifetime tied to completion. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiCustomScopeRegistry.java | Prefer container-registered bean container lookup and enforce IllegalProductException for null products. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiCreationalContext.java | Implement @AutoClose closing and track/destroy deferred dependent contexts. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiBeanImpl.java | Add reserve/eager/autoclose metadata + enforce IllegalProductException for illegal null products. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiBeanContainerImpl.java | Add reserve-aware resolution, unwrapClientProxy, proxy resolution for normal scopes, and binding matching improvements. |
| cdi/src/main/java/org/eclipse/odi/cdi/OdiApplicationContextConfigurer.java | Add CDI-aware non-unique bean resolution rules (default/alternative/reserve/priority). |
| cdi/src/main/java/org/eclipse/odi/cdi/intercept/InterceptorInstanceAssociation.java | Include default values when comparing interceptor binding member values. |
| cdi/src/main/java/org/eclipse/odi/cdi/events/ObservesMethodProcessor.java | Simplify proxy target resolution for observed methods using proxy bean definition lookup. |
| cdi/src/main/java/org/eclipse/odi/cdi/condition/UnselectedReserveCondition.java | New condition to disable unselected @Reserve beans. |
| cdi/build.gradle.kts | Add optional reactive compileOnly dependency. |
| CDI_5_BETA1_SUPPORT_PLAN.md | Add planning/verification notes for CDI 5 Beta1 support work. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Draft CDI 5.0 Beta1 support for ODI.
This updates ODI from CDI 4.1 to CDI 5.0 Beta1 artifacts and implements the CDI Lite-facing API/SPI deltas needed by the CDI 5 Lite TCK:
@Eager,@Reserve, and@AutoCloseannotation support, including validation and lifecycle handling.BeanContainer.unwrapClientProxy(...)andSeContainerInitializer.addBuildCompatibleExtensions(...)with the documented runtime limitation.BeanInfo, synthetic bean builder flags, synthetic injection point registration,SyntheticInjections, and CDI 5 synthetic creator/disposer signatures.Notes
cdi-5.1.x, which has been pushed tomicronaut-projects/micronaut-core.SeContainerInitializer.addBuildCompatibleExtensions(...)is intentionally not implemented at runtime; the method fails clearly because ODI discovers BCEs at build time.Verification
Using local Micronaut Core checkout:
Results:
SUCCESS: Executed 911 tests.