Skip to content

Add CDI 5.0 Beta1 support#32

Draft
graemerocher wants to merge 14 commits into
mainfrom
cdi-5.0.0
Draft

Add CDI 5.0 Beta1 support#32
graemerocher wants to merge 14 commits into
mainfrom
cdi-5.0.0

Conversation

@graemerocher
Copy link
Copy Markdown
Contributor

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:

  • CDI 5 Maven coordinates, TCK runner wiring, signature test updates, and documentation snippets.
  • @Eager, @Reserve, and @AutoClose annotation support, including validation and lifecycle handling.
  • CDI 5 container API additions including BeanContainer.unwrapClientProxy(...) and SeContainerInitializer.addBuildCompatibleExtensions(...) with the documented runtime limitation.
  • Build Compatible Extension SPI additions for BeanInfo, synthetic bean builder flags, synthetic injection point registration, SyntheticInjections, and CDI 5 synthetic creator/disposer signatures.
  • Async invoker handler discovery and dependent-context lifetime handling for async invocations.
  • CDI 5 lang-model support for records and sealed classes through Micronaut core APIs.
  • Defensive copies for mutable array synthetic parameters and invoker metadata.

Notes

  • This branch depends on the companion Micronaut Core branch cdi-5.1.x, which has been pushed to micronaut-projects/micronaut-core.
  • Full programmatic build compatible extension registration through SeContainerInitializer.addBuildCompatibleExtensions(...) is intentionally not implemented at runtime; the method fails clearly because ODI discovers BCEs at build time.
  • CDI Full constructor-interception-only TCK cases are excluded as out of CDI Lite scope.

Verification

Using local Micronaut Core checkout:

./gradlew -Plocal.git.odi.micronaut-core=/Users/graemerocher/dev/micronaut/core.cdi :micronaut-odi-processor-cdi:test --tests org.eclipse.odi.cdi.processor.extensions.FaultToleranceExtensionSpec --no-daemon
./gradlew -Plocal.git.odi.micronaut-core=/Users/graemerocher/dev/micronaut/core.cdi :micronaut-odi-processor-cdi:test :micronaut-odi-cdi:test :micronaut-odi-tck-runner:cdiSignatureTest --no-daemon
./gradlew -Plocal.git.odi.micronaut-core=/Users/graemerocher/dev/micronaut/core.cdi :micronaut-odi-tck-runner:fullTckTest --no-daemon

Results:

  • Focused synthetic parameter regression passed.
  • ODI processor/runtime unit tests passed.
  • CDI signature test passed.
  • CDI Lite 5 TCK passed: SUCCESS: Executed 911 tests.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants