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)
