This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit 398edd6f94973967c23f8adcd14878d3ff1d81ec
Author: James Bognar <[email protected]>
AuthorDate: Fri May 8 16:01:38 2026 -0400

    docs(todo-15): record batch 13/14/15 progress
    
    - batch 13: factoryAbstainOnNull() opt-in flag — findRestOperationArgs 
migrated
    - batch 14: preferZeroArgConstructor() opt-in flag — Map/Collection 
containers migrated
    - batch 15: standalone Builder pattern (SwaggerProvider.Builder, 
DebugEnablement.Builder,
      ThrownStats.Builder) attempted + reverted — fundamental divergence 
between legacy
      BeanCreator.builder(Class, Object) (registers a bean + suppresses 
factory-method lookup)
      and v2 BeanInstantiator builder semantics (auto-detect builder type, 
invoke build()).
      v2 picks a freshly-constructed Builder via 
DebugEnablement.create(BeanStore) over the
      configured one we passed via .addBean(). Tracked under TODO-25 for 
follow-up.
    
    Co-authored-by: Cursor <[email protected]>
---
 todo/TODO-15-replace-basicbeanstore-with-v2.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/todo/TODO-15-replace-basicbeanstore-with-v2.md 
b/todo/TODO-15-replace-basicbeanstore-with-v2.md
index 337f1095c9..323c3f2ca3 100644
--- a/todo/TODO-15-replace-basicbeanstore-with-v2.md
+++ b/todo/TODO-15-replace-basicbeanstore-with-v2.md
@@ -23,6 +23,9 @@ Eliminate the legacy injection stack in 
`org.apache.juneau.cp` (`BasicBeanStore`
 - ~~Phase 3 batch-10: cascade list helpers `BeanCreator` → 
`BeanInstantiator`~~ — **DONE (2026-05-08).** Migrated `RestConverterList`, 
`RestGuardList`, `RestMatcherList`, `ResponseProcessorList`. Per-entry storage 
retyped to `BeanInstantiator<T>`; `type(v)` -> `beanSubType(v)`; `impl(v)` -> 
`implementation(v)`; `BeanCreator::run` -> `BeanInstantiator::run` in stream 
pipelines. The cascade Builders still extend the legacy `BeanBuilder<T>` (its 
`beanStore()` already returns the v2 `BeanSto [...]
 - ~~Phase 3 batch-11: rest-common / rest-client http-part creators~~ — **DONE 
(2026-05-08).** Migrated `RequestBeanMeta` (Builder fields), 
`RequestBeanPropertyMeta` (per-property override), `ResponseBeanPropertyMeta` 
(added null-guard on `schema.getSerializer()`/`getParser()` since v2 
`beanSubType(null)` throws), 
`RestClient.getPartParser/getPartSerializer(Class)` (simple per-class 
instantiation), `RemoteOperationArg` (both ctors). `BeanCreator.execute()` 
calls rewritten as `asOptional() [...]
 - ~~Phase 3 batch-12: `RestOpContext.createPartSerializer` + `RestContext` 
child resource~~ — **DONE (2026-05-08).** 
`RestOpContext.createPartSerializer(Class<? extends HttpPartSerializer>, 
HttpPartSerializer)` migrated with null short-circuit (legacy `.type(null)` was 
tolerant, v2 throws); `cp.*` import dropped. `RestContext.java:1131` 
(child-resource path) `BeanCreator.of(rc2, bs).run()` -> 
`BeanInstantiator.of(rc2, bs).run()`. **Attempted + reverted:** 
`RestContext.findRestOperationAr [...]
+- ~~Phase 3 batch-13: `RestContext.findRestOperationArgs` migration via opt-in 
factoryAbstainOnNull flag~~ — **DONE (2026-05-08).** Added new opt-in flag 
`BeanInstantiator.factoryAbstainOnNull()`: when set, a static factory method 
that matches and returns `null` propagates `null` out of `run()` instead of 
falling through to constructor lookup. Matches legacy `BeanCreator` semantics 
for the "factory returns null to abstain" pattern (e.g. `RestOpArg` subclasses 
whose `static create(Paramet [...]
+- ~~Phase 3 batch-14: Map/Collection container creators via opt-in 
preferZeroArgConstructor flag~~ — **DONE (2026-05-08).** Added new opt-in flag 
`BeanInstantiator.preferZeroArgConstructor()`: when set, if `beanSubType` 
declares a public no-arg constructor, that ctor is used unconditionally and 
other ctors are ignored. Solves the `TreeMap(Map<? extends K, ? extends V>)` 
selection problem: v2 default sorts ctors by parameter count descending, picks 
the copy ctor; `ParameterInfo.canResolve [...]
+- ~~Phase 3 batch-15: standalone `Builder` classes (`SwaggerProvider.Builder`, 
`DebugEnablement.Builder`, `ThrownStats.Builder`)~~ — **ATTEMPTED + REVERTED 
(2026-05-08).** Tried migrating from `BeanCreator.of(Type.class, 
beanStore).type(Impl.class).builder(Builder.class, this)` to 
`BeanInstantiator.of(Type.class, 
beanStore).beanSubType(Impl.class).addBean(Builder.class, this)`. Caused 
widespread (~86) test failures: `BasicDebugEnablement` etc. came up with empty 
defaults, RestContext ini [...]
 
 ### Deeper blocker discovered (2026-05-08, batch 4)
 

Reply via email to