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 09d0bb07d140bb4259ddda4de392fba605f7af9e
Author: James Bognar <[email protected]>
AuthorDate: Fri May 8 12:52:10 2026 -0400

    refactor(inject): TODO-15 phase-3 batch 5 — flip framework defaults to 
BeanStore, unlock RestContext.java:1199
    
    Flip constructor signatures and `init(...)` template-method parameters of 
all framework
    defaults (`CallLogger`, `DebugEnablement`, `BasicCallLogger`, 
`BasicDebugEnablement`,
    `BasicTestCallLogger`, `BasicTestCaptureCallLogger`, 
`BasicDisabledCallLogger`,
    `BasicStaticFiles`, `BasicSwaggerProvider`) from legacy `BasicBeanStore` to 
the read-only
    v2 `BeanStore` interface. This is a breaking change for any user subclass 
that overrode
    `init(BasicBeanStore)`.
    
    Widen `BeanBuilder<T>` field, ctor, and public `beanStore()` accessor from
    `WritableBeanStore` to `BeanStore` — read-only is correct because builders 
only consult
    the bean store for parameter resolution at `build()` time.  
`VarResolver.Builder.bean(c, v)`
    re-architected to store beans on a local `userBeans` map and merge them 
into the resolver's
    local bean store at `build()` time, which isolates beans to that resolver 
instead of
    mutating the parent.
    
    Cascade companions flipped: `CallLoggerRule`, `StaticFiles`, 
`SwaggerProvider`,
    `DebugEnablement`, `FileFinder`, `MethodExecStore`, `MethodExecStats`, 
`ThrownStore`,
    `ThrownStats`.  Test class `Rest_BeanCreatorOverrides_Test`'s 4 user-class 
ctors flipped
    to `BeanStore` to match.
    
    `BasicBeanStore` and `BasicBeanStore2` self-register under 
`BeanStore.class` and
    `WritableBeanStore.class` so `BeanCreator` parameter resolution finds the 
bean store via
    either of those interface types — required for the 
`BasicDebugEnablement(BeanStore)` ctor
    to resolve correctly.
    
    Unlocked `RestContext.java:1199`: migrated
    `BasicBeanStore.create().overridingParent((BasicBeanStore) 
bootstrapBeanStore).build()`
    to `new BasicBeanStore2(bootstrapBeanStore)`, dropping the deeper-blocker 
comment block.
    
    Full build + tests + jetty-ftest green.
    
    Co-authored-by: Cursor <[email protected]>
---
 .../juneau/commons/inject/BasicBeanStore2.java       |  2 ++
 .../src/main/java/org/apache/juneau/BeanBuilder.java | 20 +++++++++++---------
 .../java/org/apache/juneau/cp/BasicBeanStore.java    |  7 +++++++
 .../main/java/org/apache/juneau/cp/FileFinder.java   |  6 +++---
 .../main/java/org/apache/juneau/svl/VarResolver.java | 20 +++++++++++++++++---
 .../java/org/apache/juneau/rest/RestContext.java     | 14 ++------------
 .../juneau/rest/debug/BasicDebugEnablement.java      |  5 +++--
 .../apache/juneau/rest/debug/DebugEnablement.java    | 14 +++++++-------
 .../apache/juneau/rest/logger/BasicCallLogger.java   |  5 +++--
 .../juneau/rest/logger/BasicDisabledCallLogger.java  |  5 +++--
 .../juneau/rest/logger/BasicTestCallLogger.java      |  5 +++--
 .../rest/logger/BasicTestCaptureCallLogger.java      |  5 +++--
 .../org/apache/juneau/rest/logger/CallLogger.java    | 13 +++++++------
 .../apache/juneau/rest/logger/CallLoggerRule.java    |  5 +++--
 .../juneau/rest/staticfile/BasicStaticFiles.java     |  6 +++---
 .../apache/juneau/rest/staticfile/StaticFiles.java   |  6 +++---
 .../apache/juneau/rest/stats/MethodExecStats.java    |  6 +++---
 .../apache/juneau/rest/stats/MethodExecStore.java    |  8 ++++----
 .../org/apache/juneau/rest/stats/ThrownStats.java    |  8 ++++----
 .../org/apache/juneau/rest/stats/ThrownStore.java    |  8 ++++----
 .../juneau/rest/swagger/BasicSwaggerProvider.java    |  6 +++---
 .../apache/juneau/rest/swagger/SwaggerProvider.java  |  8 ++++----
 .../annotation/Rest_BeanCreatorOverrides_Test.java   |  9 +++++----
 todo/TODO-15-replace-basicbeanstore-with-v2.md       |  1 +
 24 files changed, 108 insertions(+), 84 deletions(-)

diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BasicBeanStore2.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BasicBeanStore2.java
index bf9e65edd1..e90889ff92 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BasicBeanStore2.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/inject/BasicBeanStore2.java
@@ -126,6 +126,8 @@ public class BasicBeanStore2 implements WritableBeanStore {
                defaults = new ConcurrentHashMap<>();
                typeBindings = new ConcurrentHashMap<>();
                addSupplier(BasicBeanStore2.class, ()->this, null);
+               addSupplier(BeanStore.class, ()->this, null);
+               addSupplier(WritableBeanStore.class, ()->this, null);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
index 50c212e83a..c873a1a519 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
@@ -20,7 +20,7 @@ import static org.apache.juneau.commons.utils.Utils.*;
 
 import java.util.*;
 
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -34,7 +34,7 @@ public class BeanBuilder<T> {
        private Class<? extends T> type;
        private Class<? extends T> defaultType;
        private T impl;
-       private final WritableBeanStore beanStore;
+       private final BeanStore beanStore;
 
        /**
         * Copy constructor.
@@ -51,15 +51,17 @@ public class BeanBuilder<T> {
         * Constructor.
         *
         * <p>
-        * Accepts any {@link WritableBeanStore} \u2014 legacy {@link 
BasicBeanStore} (which
-        * implements {@link WritableBeanStore}) or the v2
-        * {@link org.apache.juneau.commons.inject.BasicBeanStore2 
BasicBeanStore2}.  Cascade-builder
-        * subclasses no longer need to downcast to {@link BasicBeanStore} when 
calling {@code super(...)}.
+        * Accepts any {@link BeanStore} (read-only interface) \u2014 legacy 
{@link BasicBeanStore}, v2
+        * {@link org.apache.juneau.commons.inject.BasicBeanStore2 
BasicBeanStore2}, or any other
+        * implementation. Subclasses use the bean store solely for parameter 
resolution at
+        * {@link #build()} time; they do not mutate it. Subclasses needing to 
register additional beans
+        * for the resolved instance to see should hold them on the builder and 
merge in {@code build()}
+        * (see {@code VarResolver.Builder.bean(...)} for an example).
         *
-        * @param beanStore The bean store to use for creating beans.
+        * @param beanStore The bean store to use for parameter resolution. 
Must not be <jk>null</jk>.
         * @param defaultType The default bean type that this builder creates.
         */
-       protected BeanBuilder(Class<? extends T> defaultType, WritableBeanStore 
beanStore) {
+       protected BeanBuilder(Class<? extends T> defaultType, BeanStore 
beanStore) {
                this.defaultType = type = defaultType;
                this.beanStore = beanStore;
        }
@@ -69,7 +71,7 @@ public class BeanBuilder<T> {
         *
         * @return The bean store passed in through the constructor.
         */
-       public WritableBeanStore beanStore() {
+       public BeanStore beanStore() {
                return beanStore;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicBeanStore.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicBeanStore.java
index 1c4bca7f5f..85d76ecce0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicBeanStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicBeanStore.java
@@ -31,6 +31,7 @@ import java.util.function.*;
 import org.apache.juneau.commons.collections.*;
 import org.apache.juneau.commons.concurrent.*;
 import org.apache.juneau.commons.inject.BeanCreationException;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.inject.WritableBeanStore;
 import org.apache.juneau.commons.reflect.*;
 
@@ -326,6 +327,12 @@ public class BasicBeanStore implements WritableBeanStore {
                var e = createEntry(BasicBeanStore.class, ()->this, null);
                entries.addFirst(e);
                unnamedEntries.put(BasicBeanStore.class, e);
+               var e2 = createEntry(BeanStore.class, ()->this, null);
+               entries.addFirst(e2);
+               unnamedEntries.put(BeanStore.class, e2);
+               var e3 = createEntry(WritableBeanStore.class, ()->this, null);
+               entries.addFirst(e3);
+               unnamedEntries.put(WritableBeanStore.class, e3);
        }
 
        BasicBeanStore() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
index 2d808788d1..7bf096b4f7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
@@ -26,7 +26,7 @@ import java.util.*;
 import java.util.regex.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.io.*;
 
 /**
@@ -113,7 +113,7 @@ public interface FileFinder {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(BasicFileFinder.class, beanStore);
                        roots = set();
                        cachingLimit = -1;
@@ -236,7 +236,7 @@ public interface FileFinder {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       static Builder create(WritableBeanStore beanStore) {
+       static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
index 2c861d9325..5f7b8cea7f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -81,6 +81,7 @@ public class VarResolver {
        public static class Builder extends BeanBuilder<VarResolver> {
 
                final VarList vars;
+               final java.util.LinkedHashMap<Class<?>,Object> userBeans;
 
                /**
                 * Constructor.
@@ -88,6 +89,7 @@ public class VarResolver {
                protected Builder() {
                        super(VarResolver.class, 
BasicBeanStore.create().build());
                        vars = VarList.create();
+                       userBeans = new java.util.LinkedHashMap<>();
                }
 
                /**
@@ -98,10 +100,16 @@ public class VarResolver {
                protected Builder(VarResolver copyFrom) {
                        super(copyFrom.getClass(), copyFrom.beanStore);
                        vars = VarList.of(copyFrom.vars);
+                       userBeans = new java.util.LinkedHashMap<>();
                }
 
                /**
-                * Adds a bean to the bean store in this session.
+                * Adds a bean to the resolved {@link VarResolver}'s local bean 
store.
+                *
+                * <p>
+                * The bean is stored on this builder and merged into the 
resolver's local bean store at
+                * {@link #build()} time.  The parent bean store passed at 
construction is not mutated, so beans
+                * added here are isolated to {@link VarResolver}s built from 
this builder.
                 *
                 * @param <T> The bean type.
                 * @param c The bean type.
@@ -109,7 +117,7 @@ public class VarResolver {
                 * @return This object .
                 */
                public <T> Builder bean(Class<T> c, T value) {
-                       super.beanStore().addBean(c, value);
+                       userBeans.put(c, value);
                        return this;
                }
 
@@ -249,6 +257,10 @@ public class VarResolver {
         *
         * @param builder The builder for this object.
         */
+       @SuppressWarnings({
+               "unchecked", // Type erasure on userBeans map: the runtime 
types match by construction
+               "rawtypes"   // Same reason — Builder.bean(Class<T>, T) ensures 
Class/value pairing
+       })
        protected VarResolver(Builder builder) {
                this.vars = builder.vars.stream().map(x -> 
toVar(builder.beanStore(), x)).toArray(Var[]::new);
 
@@ -257,7 +269,9 @@ public class VarResolver {
                        m.put(v.getName(), v);
 
                this.varMap = u(m);
-               this.beanStore = new BasicBeanStore2(builder.beanStore());
+               var bs = new BasicBeanStore2(builder.beanStore());
+               builder.userBeans.forEach((c, v) -> bs.addBean((Class) c, v));
+               this.beanStore = bs;
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index ee1860cda8..09601af34e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -1194,20 +1194,10 @@ public class RestContext extends Context {
                                .addBean(ServletContext.class, 
(nn(builder.inner) ? builder.inner : builder).getServletContext());
                        // @formatter:on
 
-                       // If no parent store, promote bs to bootstrap and 
layer a fresh per-resource store on top.
-                       // NOTE: Stays on legacy `BasicBeanStore.create()...` 
chain (vs `new BasicBeanStore2(null, X)`)
-                       // because (1) `BeanCreator` resolves 
`BasicBeanStore`-typed constructor params (e.g.
-                       // `BasicDebugEnablement(BasicBeanStore)`) by walking 
the parent chain — a `BasicBeanStore2`
-                       // here does not satisfy that lookup, and the walk 
falls through to `bootstrapBeanStore`
-                       // (legacy, self-registered as `BasicBeanStore.class`) 
which does NOT have the
-                       // per-resource framework default suppliers, breaking 
init() Bean lookups; and (2) user-facing
-                       // `@RestPostCall void hook(BasicBeanStore bs)` 
parameters are resolved via `RestOpSessionArgs`
-                       // which propagates this same bean store. Migration 
deferred until either
-                       // `BasicDebugEnablement` / `BeanCreator` 
constructor-param resolution moves off legacy
-                       // `BasicBeanStore`, or Phase 4 cutover absorbs the 
legacy statics into v2.
+                       // If no parent store, promote bs to bootstrap and 
layer a fresh per-resource v2 store on top.
                        if (parentBs == null) {
                                bootstrapBeanStore = bs;
-                               bs = 
BasicBeanStore.create().overridingParent((BasicBeanStore) 
bootstrapBeanStore).build();
+                               bs = new BasicBeanStore2(bootstrapBeanStore);
                        } else {
                                bootstrapBeanStore = parentBs;
                        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index 642fe9aeaf..4631406f8c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -23,6 +23,7 @@ import static 
org.apache.juneau.rest.annotation.RestOpAnnotation.*;
 
 import java.util.*;
 import org.apache.juneau.*;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.reflect.*;
 import org.apache.juneau.commons.utils.*;
 import org.apache.juneau.cp.*;
@@ -54,12 +55,12 @@ public class BasicDebugEnablement extends DebugEnablement {
         *
         * @param beanStore The bean store containing injectable beans for this 
enablement.
         */
-       public BasicDebugEnablement(BasicBeanStore beanStore) {
+       public BasicDebugEnablement(BeanStore beanStore) {
                super(beanStore);
        }
 
        @Override
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                var b = super.init(beanStore);
 
                var resource = 
beanStore.getBean(ResourceSupplier.class).orElseThrow(() -> new 
IllegalStateException("ResourceSupplier not found"));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
index dbfeb38cf8..73e5fbd018 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
@@ -24,7 +24,7 @@ import java.util.function.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.commons.collections.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.reflect.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.response.*;
@@ -67,7 +67,7 @@ public abstract class DebugEnablement {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        mapBuilder = ReflectionMap.create(Enablement.class);
                        defaultEnablement = NEVER;
                        conditional = x -> eqic("true", 
x.getHeader(HEADER_Debug));
@@ -207,7 +207,7 @@ public abstract class DebugEnablement {
         * Represents no DebugEnablement.
         */
        public abstract class Void extends DebugEnablement {
-               Void(BasicBeanStore beanStore) {
+               Void(BeanStore beanStore) {
                        super(beanStore);
                }
        }
@@ -218,7 +218,7 @@ public abstract class DebugEnablement {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(WritableBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
@@ -229,11 +229,11 @@ public abstract class DebugEnablement {
        /**
         * Constructor.
         * <p>
-        * Subclasses typically override the {@link #init(BasicBeanStore)} 
method when using this constructor.
+        * Subclasses typically override the {@link #init(BeanStore)} method 
when using this constructor.
         *
         * @param beanStore The bean store containing injectable beans for this 
enablement.
         */
-       protected DebugEnablement(BasicBeanStore beanStore) {
+       protected DebugEnablement(BeanStore beanStore) {
                var builder = init(beanStore);
                this.defaultEnablement = 
firstNonNull(builder.defaultEnablement, NEVER);
                this.enablementMap = builder.mapBuilder.build();
@@ -308,7 +308,7 @@ public abstract class DebugEnablement {
         * @param beanStore The bean store containing injectable beans for this 
logger.
         * @return A new builder object.
         */
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicCallLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicCallLogger.java
index 085a5395ce..19650dc5a6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicCallLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicCallLogger.java
@@ -19,6 +19,7 @@ package org.apache.juneau.rest.logger;
 import static java.util.logging.Level.*;
 import static org.apache.juneau.rest.logger.CallLoggingDetail.*;
 
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.rest.*;
 
@@ -52,12 +53,12 @@ public class BasicCallLogger extends CallLogger {
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicCallLogger(BasicBeanStore beanStore) {
+       public BasicCallLogger(BeanStore beanStore) {
                super(beanStore);
        }
 
        @Override
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                // @formatter:off
                return super.init(beanStore)
                        .normalRules(  // Rules when debugging is not enabled.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicDisabledCallLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicDisabledCallLogger.java
index 7ac563c8d3..adb214328e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicDisabledCallLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicDisabledCallLogger.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.logger;
 
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -32,12 +33,12 @@ public class BasicDisabledCallLogger extends CallLogger {
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicDisabledCallLogger(BasicBeanStore beanStore) {
+       public BasicDisabledCallLogger(BeanStore beanStore) {
                super(beanStore);
        }
 
        @Override
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                return super.init(beanStore).disabled();
        }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
index 48f12d0755..7c27549146 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.Enablement.*;
 import static org.apache.juneau.commons.utils.Utils.*;
 import static org.apache.juneau.rest.logger.CallLoggingDetail.*;
 
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.rest.*;
 
@@ -69,12 +70,12 @@ public class BasicTestCallLogger extends CallLogger {
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicTestCallLogger(BasicBeanStore beanStore) {
+       public BasicTestCallLogger(BeanStore beanStore) {
                super(beanStore);
        }
 
        @Override
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                // @formatter:off
                return super.init(beanStore)
                        .normalRules(  // Rules when debugging is not enabled.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCaptureCallLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCaptureCallLogger.java
index 3820c1007e..b0f842ab0a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCaptureCallLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCaptureCallLogger.java
@@ -23,6 +23,7 @@ import java.util.concurrent.atomic.*;
 import java.util.logging.*;
 
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -92,7 +93,7 @@ public class BasicTestCaptureCallLogger extends CallLogger {
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicTestCaptureCallLogger(BasicBeanStore beanStore) {
+       public BasicTestCaptureCallLogger(BeanStore beanStore) {
                super(beanStore);
        }
 
@@ -175,7 +176,7 @@ public class BasicTestCaptureCallLogger extends CallLogger {
        }
 
        @Override
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                // @formatter:off
                return super.init(beanStore)
                        .normalRules(  // Rules when debugging is not enabled.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
index e3945576ff..4668406934 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
@@ -31,6 +31,7 @@ import java.util.logging.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.commons.collections.*;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.utils.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.rest.annotation.*;
@@ -129,7 +130,7 @@ public class CallLogger {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(BasicBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        logger = Logger.getLogger(env(SP_logger, "global"));
                        enabled = env(SP_enabled, ALWAYS);
                        enabledTest = x -> false;
@@ -420,7 +421,7 @@ public class CallLogger {
 
        /** Represents no logger */
        public abstract class Void extends CallLogger {
-               Void(BasicBeanStore beanStore) {
+               Void(BeanStore beanStore) {
                        super(beanStore);
                }
        }
@@ -500,7 +501,7 @@ public class CallLogger {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(BasicBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
@@ -517,11 +518,11 @@ public class CallLogger {
        /**
         * Constructor.
         * <p>
-        * Subclasses typically override the {@link #init(BasicBeanStore)} 
method when using this constructor.
+        * Subclasses typically override the {@link #init(BeanStore)} method 
when using this constructor.
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public CallLogger(BasicBeanStore beanStore) {
+       public CallLogger(BeanStore beanStore) {
                var builder = init(beanStore);
                this.logger = builder.logger;
                this.thrownStore = builder.thrownStore;
@@ -749,7 +750,7 @@ public class CallLogger {
         * @param beanStore The bean store containing injectable beans for this 
logger.
         * @return A new builder object.
         */
-       protected Builder init(BasicBeanStore beanStore) {
+       protected Builder init(BeanStore beanStore) {
                return new 
Builder(beanStore).logger(beanStore.getBean(Logger.class).orElse(null)).thrownStore(beanStore.getBean(ThrownStore.class).orElse(null));
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
index dcc27b84d3..9687174f55 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
@@ -24,6 +24,7 @@ import java.util.logging.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.commons.collections.*;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 import jakarta.servlet.http.*;
@@ -72,7 +73,7 @@ public class CallLoggerRule {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(BasicBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(CallLoggerRule.class, beanStore);
                }
 
@@ -319,7 +320,7 @@ public class CallLoggerRule {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(BasicBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/BasicStaticFiles.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/BasicStaticFiles.java
index 05ec948514..7a209bef1e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/BasicStaticFiles.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/BasicStaticFiles.java
@@ -27,7 +27,7 @@ import java.util.*;
 
 import org.apache.http.*;
 import org.apache.juneau.commons.collections.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.io.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.resource.*;
@@ -60,7 +60,7 @@ public class BasicStaticFiles implements StaticFiles {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static StaticFiles.Builder create(WritableBeanStore beanStore) {
+       public static StaticFiles.Builder create(BeanStore beanStore) {
                return new StaticFiles.Builder(beanStore);
        }
 
@@ -75,7 +75,7 @@ public class BasicStaticFiles implements StaticFiles {
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicStaticFiles(BasicBeanStore beanStore) {
+       public BasicStaticFiles(BeanStore beanStore) {
                // @formatter:off
                this(StaticFiles
                        .create(beanStore)
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/StaticFiles.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/StaticFiles.java
index 400760e824..06160b7597 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/StaticFiles.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/staticfile/StaticFiles.java
@@ -23,7 +23,7 @@ import java.util.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.io.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.resource.*;
@@ -51,7 +51,7 @@ public interface StaticFiles extends FileFinder {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(BasicStaticFiles.class, beanStore);
                        headers = list();
                        fileFinder = FileFinder.create(beanStore);
@@ -193,7 +193,7 @@ public interface StaticFiles extends FileFinder {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       static Builder create(WritableBeanStore beanStore) {
+       static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStats.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStats.java
index 3285c84555..fddf15b991 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStats.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStats.java
@@ -25,7 +25,7 @@ import java.util.concurrent.atomic.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.commons.collections.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -67,7 +67,7 @@ public class MethodExecStats {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(MethodExecStats.class, beanStore);
                }
 
@@ -117,7 +117,7 @@ public class MethodExecStats {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(WritableBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStore.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStore.java
index db7d161216..f7b4b416a3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStore.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/MethodExecStore.java
@@ -23,7 +23,7 @@ import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -51,7 +51,7 @@ public class MethodExecStore {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(MethodExecStore.class, beanStore);
                }
 
@@ -128,12 +128,12 @@ public class MethodExecStore {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(WritableBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
        private final ThrownStore thrownStore;
-       private final WritableBeanStore beanStore;
+       private final BeanStore beanStore;
        private final Class<? extends MethodExecStats> statsImplClass;
        private final ConcurrentHashMap<Method,MethodExecStats> db = new 
ConcurrentHashMap<>();
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStats.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStats.java
index f986d3657c..1135f75abf 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStats.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStats.java
@@ -23,7 +23,7 @@ import java.util.*;
 import java.util.concurrent.atomic.*;
 
 import org.apache.juneau.commons.collections.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -54,7 +54,7 @@ public class ThrownStats {
         */
        public static class Builder {
 
-               final WritableBeanStore beanStore;
+               final BeanStore beanStore;
                Throwable throwable;
                long hash;
                List<String> stackTrace;
@@ -67,7 +67,7 @@ public class ThrownStats {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        this.beanStore = beanStore;
                        this.creator = BeanCreator.of(ThrownStats.class, 
beanStore).builder(Builder.class, this);
                }
@@ -143,7 +143,7 @@ public class ThrownStats {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(WritableBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
index 6edbe10cf8..6d29977fa6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
@@ -25,7 +25,7 @@ import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 
 /**
@@ -54,7 +54,7 @@ public class ThrownStore {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        super(ThrownStore.class, beanStore);
                }
 
@@ -134,13 +134,13 @@ public class ThrownStore {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       public static Builder create(WritableBeanStore beanStore) {
+       public static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
        private final ConcurrentHashMap<Long,ThrownStats> db = new 
ConcurrentHashMap<>();
        private final Optional<ThrownStore> parent;
-       private final WritableBeanStore beanStore;
+       private final BeanStore beanStore;
        private final Class<? extends ThrownStats> statsImplClass;
        private final Set<String> ignoreClasses;
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
index e2fceb4f3d..ae4ed044ed 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
@@ -21,7 +21,7 @@ import static org.apache.juneau.commons.utils.Utils.*;
 import java.util.*;
 
 import org.apache.juneau.bean.swagger.Swagger;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.rest.*;
@@ -41,14 +41,14 @@ public class BasicSwaggerProvider implements 
SwaggerProvider {
        private final JsonSchemaGenerator js;
        private final Messages messages;
        private final FileFinder fileFinder;
-       private final WritableBeanStore beanStore;
+       private final BeanStore beanStore;
 
        /**
         * Constructor.
         *
         * @param beanStore The bean store containing injectable beans for this 
logger.
         */
-       public BasicSwaggerProvider(WritableBeanStore beanStore) {
+       public BasicSwaggerProvider(BeanStore beanStore) {
                // @formatter:off
                this(
                        SwaggerProvider
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/SwaggerProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/SwaggerProvider.java
index 3b3aebe3a5..a560c427f1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/SwaggerProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/SwaggerProvider.java
@@ -22,7 +22,7 @@ import java.util.*;
 import java.util.function.*;
 
 import org.apache.juneau.bean.swagger.Swagger;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.jsonschema.*;
@@ -44,7 +44,7 @@ public interface SwaggerProvider {
         */
        public class Builder {
 
-               final WritableBeanStore beanStore;
+               final BeanStore beanStore;
                Class<?> resourceClass;
                Supplier<VarResolver> varResolver;
                Supplier<JsonSchemaGenerator> jsonSchemaGenerator;
@@ -57,7 +57,7 @@ public interface SwaggerProvider {
                 *
                 * @param beanStore The bean store to use for creating beans.
                 */
-               protected Builder(WritableBeanStore beanStore) {
+               protected Builder(BeanStore beanStore) {
                        this.beanStore = beanStore;
                        this.creator = BeanCreator.of(SwaggerProvider.class, 
this.beanStore).type(BasicSwaggerProvider.class).builder(Builder.class, this);
                }
@@ -204,7 +204,7 @@ public interface SwaggerProvider {
         * @param beanStore The bean store to use for creating beans.
         * @return A new builder for this object.
         */
-       static Builder create(WritableBeanStore beanStore) {
+       static Builder create(BeanStore beanStore) {
                return new Builder(beanStore);
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_BeanCreatorOverrides_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_BeanCreatorOverrides_Test.java
index 03d54d08a5..eb18fb2845 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_BeanCreatorOverrides_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_BeanCreatorOverrides_Test.java
@@ -19,6 +19,7 @@ package org.apache.juneau.rest.annotation;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.debug.*;
@@ -52,7 +53,7 @@ class Rest_BeanCreatorOverrides_Test extends TestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        public static class CustomDebugEnablement extends BasicDebugEnablement {
-               public CustomDebugEnablement(BasicBeanStore beanStore) {
+               public CustomDebugEnablement(BeanStore beanStore) {
                        super(beanStore);
                }
        }
@@ -80,7 +81,7 @@ class Rest_BeanCreatorOverrides_Test extends TestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        public static class CustomStaticFiles extends BasicStaticFiles {
-               public CustomStaticFiles(BasicBeanStore beanStore) {
+               public CustomStaticFiles(BeanStore beanStore) {
                        super(beanStore);
                }
        }
@@ -108,7 +109,7 @@ class Rest_BeanCreatorOverrides_Test extends TestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        public static class CustomSwaggerProvider extends BasicSwaggerProvider {
-               public CustomSwaggerProvider(BasicBeanStore beanStore) {
+               public CustomSwaggerProvider(BeanStore beanStore) {
                        super(beanStore);
                }
        }
@@ -136,7 +137,7 @@ class Rest_BeanCreatorOverrides_Test extends TestBase {
        
//------------------------------------------------------------------------------------------------------------------
 
        public static class CustomDebugEnablement2 extends BasicDebugEnablement 
{
-               public CustomDebugEnablement2(BasicBeanStore beanStore) {
+               public CustomDebugEnablement2(BeanStore beanStore) {
                        super(beanStore);
                }
        }
diff --git a/todo/TODO-15-replace-basicbeanstore-with-v2.md 
b/todo/TODO-15-replace-basicbeanstore-with-v2.md
index b1721815b6..8a38c90271 100644
--- a/todo/TODO-15-replace-basicbeanstore-with-v2.md
+++ b/todo/TODO-15-replace-basicbeanstore-with-v2.md
@@ -15,6 +15,7 @@ Eliminate the legacy injection stack in 
`org.apache.juneau.cp` (`BasicBeanStore`
 - ~~Four-memoizer migration to `BeanInstantiator` (Phase 3 sub-task)~~ — 
**ATTEMPTED + REVERTED (2026-05-08).** `callLogger` / `debugEnablement` / 
`staticFiles` / `swaggerProvider` were migrated to 
`BeanInstantiator.of(...).beanSubType(...).run()`; this broke documented 
`@Rest(callLogger=…)` / `@Rest(debugEnablement=…)` / `@Rest(swaggerProvider=…)` 
annotation overrides (3 `Rest_BeanCreatorOverrides_Test` failures) plus 
`juneau-examples-rest-jetty-ftest` (static files no longer served — ` [...]
 - ~~Phase 3 batch-3: drop vestigial `(BasicBeanStore)` casts at 
framework-defaults call sites~~ — **DONE (2026-05-08).** Sixteen 
`(BasicBeanStore) bs` casts in `RestContext.java` (lines 494, 515, 584, 676, 
753, 768, 914, 937, 957, 987, 1008, 1029, 1064, 1110, 1125) and one in 
`RestOpContext.java` (line 437) dropped. These were vestigial leftovers from 
before the utility-class `create(...)` factories were widened to 
`WritableBeanStore` in the cascade-builder work. The cast was no longer r [...]
 - ~~Phase 3 batch-4: widen field types + getter return types in `RestSession` 
/ `RestOpSession` / `VarResolver` / `VarResolverSession`~~ — **DONE 
(2026-05-08).** Field types and accessor return types widened from legacy 
`BasicBeanStore` to v2 `WritableBeanStore`; corresponding 
`BasicBeanStore.of((BasicBeanStore) X)` calls migrated to `new 
BasicBeanStore2(X)`: `VarResolver.beanStore` (field) + 
`VarResolver.createSession(BasicBeanStore)` (public method param) + 
`VarResolverSession.beanStor [...]
+- ~~Phase 3 batch-5: flip framework-default ctors + `init()` template methods 
to `BeanStore`; widen `BeanBuilder<T>` to `BeanStore`; unlock 
`RestContext.java:1199`~~ — **DONE (2026-05-08).** Constructor signatures and 
`init(...)` template method parameters of all framework defaults (`CallLogger`, 
`DebugEnablement`, `BasicCallLogger`, `BasicDebugEnablement`, 
`BasicTestCallLogger`, `BasicTestCaptureCallLogger`, `BasicDisabledCallLogger`, 
`BasicStaticFiles`, `BasicSwaggerProvider`) flipped  [...]
 
 ### Deeper blocker discovered (2026-05-08, batch 4)
 


Reply via email to