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


The following commit(s) were added to refs/heads/master by this push:
     new 693f18cfab refactor: inline RestOpContext.Builder sub-builders into 
lazy memoizers; add convenience accessors
693f18cfab is described below

commit 693f18cfab699b6de3dbc5a19cd0f2f3c7f24af6
Author: James Bognar <[email protected]>
AuthorDate: Mon May 4 12:03:52 2026 -0400

    refactor: inline RestOpContext.Builder sub-builders into lazy memoizers; 
add convenience accessors
---
 .../java/org/apache/juneau/rest/RestOpContext.java | 345 +++++++--------------
 1 file changed, 112 insertions(+), 233 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index db29564688..0ed96a38fb 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -34,8 +34,8 @@ import java.lang.reflect.Method;
 import java.nio.charset.*;
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.function.Consumer;
 import java.util.stream.*;
-import java.util.function.*;
 import org.apache.juneau.*;
 import org.apache.juneau.commons.annotation.*;
 import org.apache.juneau.commons.collections.FluentMap;
@@ -51,7 +51,6 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.httppart.*;
-import org.apache.juneau.httppart.HttpPartSerializer.*;
 import org.apache.juneau.httppart.bean.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.parser.*;
@@ -113,27 +112,15 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         */
        static class Builder extends Context.Builder {
 
-               private BeanContext.Builder beanContext;
-               private BasicBeanStore beanStore;
-               private EncoderSet.Builder encoders;
-               private HttpPartParser.Creator partParser;
-               private HttpPartSerializer.Creator partSerializer;
-               private JsonSchemaGenerator.Builder jsonSchemaGenerator;
                private Method restMethod;
-               private ParserSet.Builder parsers;
                private RestContext restContext;
-               private RestContext.Builder parent;
-               private SerializerSet.Builder serializers;
 
                Builder(Method method, RestContext context) {
 
                        this.restContext = context;
-                       this.parent = context.builder;
                        this.restMethod = method;
 
-                       this.beanStore = 
BasicBeanStore.of(context.getBeanStore()).addBean(Method.class, method);
                        var ap = 
context.getBeanContext().getAnnotationProvider();
-
                        var mi = MethodInfo.of(context.getResourceClass(), 
method);
                        var resourceClass = 
ClassInfo.of(context.getResourceClass());
 
@@ -153,150 +140,15 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
 
                                apply(work);
 
-                               if 
(context.builder.beanContext().canApply(work))
-                                       beanContext().apply(work);
-                               if 
(context.builder.serializers().canApply(work))
-                                       serializers().apply(work);
-                               if (context.builder.parsers().canApply(work))
-                                       parsers().apply(work);
-                               if 
(context.builder.partSerializer().canApply(work))
-                                       partSerializer().apply(work);
-                               if (context.builder.partParser().canApply(work))
-                                       partParser().apply(work);
-                               if 
(context.builder.jsonSchemaGenerator().canApply(work))
-                                       jsonSchemaGenerator().apply(work);
-
                        } catch (Exception e) {
                                throw new InternalServerError(e);
                        }
                }
 
-               Builder beanStore(BasicBeanStore value) {
-                       this.beanStore = value;
-                       return this;
-               }
-
-               BasicBeanStore beanStore() {
-                       return beanStore;
-               }
-
-               BeanContext.Builder beanContext() {
-                       if (beanContext == null)
-                               beanContext = createBeanContext(beanStore(), 
parent, resource());
-                       return beanContext;
-               }
-
-               EncoderSet.Builder encoders() {
-                       if (encoders == null)
-                               encoders = createEncoders(parent);
-                       return encoders;
-               }
-
-               JsonSchemaGenerator.Builder jsonSchemaGenerator() {
-                       if (jsonSchemaGenerator == null)
-                               jsonSchemaGenerator = 
createJsonSchemaGenerator(beanStore(), parent, resource());
-                       return jsonSchemaGenerator;
-               }
-
-               ParserSet.Builder parsers() {
-                       if (parsers == null)
-                               parsers = createParsers(parent);
-                       return parsers;
-               }
-
-               HttpPartParser.Creator partParser() {
-                       if (partParser == null)
-                               partParser = createPartParser(beanStore(), 
parent, resource());
-                       return partParser;
-               }
-
-               HttpPartSerializer.Creator partSerializer() {
-                       if (partSerializer == null)
-                               partSerializer = 
createPartSerializer(beanStore(), parent, resource());
-                       return partSerializer;
-               }
-
-               SerializerSet.Builder serializers() {
-                       if (serializers == null)
-                               serializers = createSerializers(parent);
-                       return serializers;
-               }
-
-               @SuppressWarnings({
-                       "java:S1452" // Wildcard required - Supplier<?> for 
generic REST resource instance
-               })
-               Supplier<?> resource() {
-                       return restContext.builder.resource();
-               }
-
-               Optional<BeanContext> getBeanContext() { return 
opt(beanContext).map(BeanContext.Builder::build); }
-               Optional<JsonSchemaGenerator> getJsonSchemaGenerator() { return 
opt(jsonSchemaGenerator).map(JsonSchemaGenerator.Builder::build); }
-               Optional<HttpPartParser> getPartParser() { return 
opt(partParser).map(org.apache.juneau.httppart.HttpPartParser.Creator::create); 
}
-               Optional<HttpPartSerializer> getPartSerializer() { return 
opt(partSerializer).map(Creator::create); }
-
                @Override /* Overridden from Context.Builder */
                public Builder copy() {
                        throw new NoSuchMethodError("Not implemented.");
                }
-
-               private boolean matches(MethodInfo annotated) {
-                       var a = 
annotated.getAnnotations(RestInject.class).findFirst().map(AnnotationInfo::inner).orElse(null);
-                       if (nn(a)) {
-                               for (var n : a.methodScope()) {
-                                       if ("*".equals(n) || 
restMethod.getName().equals(n))
-                                               return true;
-                               }
-                       }
-                       return false;
-               }
-
-               private BeanContext.Builder createBeanContext(BasicBeanStore 
beanStore, RestContext.Builder parent, Supplier<?> resource) {
-                       Value<BeanContext.Builder> v = 
Value.of(parent.beanContext().copy());
-                       var bs = 
BasicBeanStore.of(beanStore).addBean(BeanContext.Builder.class, v.get());
-                       new BeanCreateMethodFinder<>(BeanContext.class, 
resource, bs)
-                               .find(this::matches)
-                               .run(x -> v.get().impl(x));
-                       return v.get();
-               }
-
-               private static EncoderSet.Builder 
createEncoders(RestContext.Builder parent) {
-                       return parent.encoders().copy();
-               }
-
-               private JsonSchemaGenerator.Builder 
createJsonSchemaGenerator(BasicBeanStore beanStore, RestContext.Builder parent, 
Supplier<?> resource) {
-                       Value<JsonSchemaGenerator.Builder> v = 
Value.of(parent.jsonSchemaGenerator().copy());
-                       var bs = 
BasicBeanStore.of(beanStore).addBean(JsonSchemaGenerator.Builder.class, 
v.get());
-                       new BeanCreateMethodFinder<>(JsonSchemaGenerator.class, 
resource, bs)
-                               .find(this::matches)
-                               .run(x -> v.get().impl(x));
-                       return v.get();
-               }
-
-               private static ParserSet.Builder 
createParsers(RestContext.Builder parent) {
-                       return parent.parsers().copy();
-               }
-
-               private HttpPartParser.Creator createPartParser(BasicBeanStore 
beanStore, RestContext.Builder parent, Supplier<?> resource) {
-                       Value<HttpPartParser.Creator> v = 
Value.of(parent.partParser().copy());
-                       var bs = 
BasicBeanStore.of(beanStore).addBean(HttpPartParser.Creator.class, v.get());
-                       new BeanCreateMethodFinder<>(HttpPartParser.class, 
resource, bs)
-                               .find(this::matches)
-                               .run(x -> v.get().impl(x));
-                       return v.get();
-               }
-
-               private HttpPartSerializer.Creator 
createPartSerializer(BasicBeanStore beanStore, RestContext.Builder parent, 
Supplier<?> resource) {
-                       Value<HttpPartSerializer.Creator> v = 
Value.of(parent.partSerializer().copy());
-                       var bs = 
BasicBeanStore.of(beanStore).addBean(HttpPartSerializer.Creator.class, v.get());
-                       new BeanCreateMethodFinder<>(HttpPartSerializer.class, 
resource, bs)
-                               .find(this::matches)
-                               .run(x -> v.get().impl(x));
-                       return v.get();
-               }
-
-               private static SerializerSet.Builder 
createSerializers(RestContext.Builder parent) {
-                       return parent.serializers().copy();
-               }
        }
 
        private static HttpPartSerializer createPartSerializer(Class<? extends 
HttpPartSerializer> c, HttpPartSerializer defaultSerializer) {
@@ -314,29 +166,15 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        protected final RestOpInvoker[] preCallMethods;
        protected final ResponseBeanMeta responseMeta;
 
-       // Sub-builder fields: annotation-applied copies captured from Builder 
before it is discarded.
-       // Non-null only when op-level annotations actually touched the 
sub-builder during construction.
-       // null means "no op annotations applied" and the memoizer falls 
through to the parent context value.
-       private final BeanContext.Builder beanContextBuilder;
-       private final EncoderSet.Builder encodersBuilder;
-       private final JsonSchemaGenerator.Builder jsonSchemaGeneratorBuilder;
-       private final ParserSet.Builder parsersBuilder;
-       private final HttpPartParser.Creator partParserCreator;
-       private final HttpPartSerializer.Creator partSerializerCreator;
-       private final SerializerSet.Builder serializersBuilder;
-
-       // The annotation work-list produced during construction (replaces 
builder.getApplied() references).
+       // The annotation work-list produced during construction.
        private final AnnotationWorkList appliedAnnotations;
 
        private RestContext restContext() { return context; }
        private Method method() { return method; }
-       private BeanContext.Builder beanContextBuilder() { return 
beanContextBuilder; }
-       private EncoderSet.Builder encodersBuilder() { return encodersBuilder; }
-       private JsonSchemaGenerator.Builder jsonSchemaGeneratorBuilder() { 
return jsonSchemaGeneratorBuilder; }
-       private ParserSet.Builder parsersBuilder() { return parsersBuilder; }
-       private HttpPartParser.Creator partParserCreator() { return 
partParserCreator; }
-       private HttpPartSerializer.Creator partSerializerCreator() { return 
partSerializerCreator; }
-       private SerializerSet.Builder serializersBuilder() { return 
serializersBuilder; }
+       private AnnotationWorkList appliedAnnotations() { return 
appliedAnnotations; }
+       private BasicBeanStore beanStore() { return context.getBeanStore(); }
+       private Object resource() { return context.getResource(); }
+       private VarResolver varResolver() { return context.getVarResolver(); }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Memoized fields
@@ -372,10 +210,10 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        private final Memoizer<DebugEnablement> debugEnablement = memoizer(() 
-> {
                var v = findOpString(PROPERTY_debug);
                if (v.isPresent())
-                       return 
DebugEnablement.create(restContext().getBeanStore()).enable(Enablement.fromString(v.get()),
 "*").build();
+                       return 
DebugEnablement.create(beanStore()).enable(Enablement.fromString(v.get()), 
"*").build();
                if (isInherited(PROPERTY_debug))
                        return restContext().getDebugEnablement();
-               return 
DebugEnablement.create(restContext().getBeanStore()).build();
+               return DebugEnablement.create(beanStore()).build();
        });
 
        /**
@@ -418,7 +256,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         */
        @SuppressWarnings("java:S3776")
        private final Memoizer<String> httpMethod = memoizer(() -> {
-               var vr = restContext().getVarResolver();
+               var vr = varResolver();
                for (var ai : getRestOpAnnotations()) {
                        var v = httpMethodFromAnnotation(ai.inner(), vr);
                        if (v != null && !v.isEmpty())
@@ -458,7 +296,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                if (isInherited(p))
                        l.addAll(restContext().getAllowedParserOptions());
                getRestOpAnnotations().stream()
-                       .flatMap(ai -> 
resolveCdl(ai.getStringArray(p).orElse(new String[0])))
+                       .flatMap(ai -> 
resolveCdl(ai.getStringArray(p).orElse(EMPTY_STRING_ARRAY)))
                        .forEach(l::add);
                return u(treeSetCi(removeNegations(l)));
        });
@@ -470,15 +308,27 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                if (isInherited(p))
                        l.addAll(restContext().getAllowedSerializerOptions());
                getRestOpAnnotations().stream()
-                       .flatMap(ai -> 
resolveCdl(ai.getStringArray(p).orElse(new String[0])))
+                       .flatMap(ai -> 
resolveCdl(ai.getStringArray(p).orElse(EMPTY_STRING_ARRAY)))
                        .forEach(l::add);
                return u(treeSetCi(removeNegations(l)));
        });
 
        /** The {@link BeanContext} for this operation (op-level annotations 
applied on top of the parent context). */
-       private final Memoizer<BeanContext> beanContext = memoizer(() ->
-               beanContextBuilder() != null ? beanContextBuilder().build() : 
restContext().getBeanContext()
-       );
+       private final Memoizer<BeanContext> beanContext = memoizer(() -> {
+               var aa = appliedAnnotations();
+               var parent = restContext().builder.beanContext();
+               if (!parent.canApply(aa))
+                       return restContext().getBeanContext();
+               Value<BeanContext.Builder> v = Value.of(parent.copy());
+               v.get().apply(aa);
+               var bs = BasicBeanStore.of(beanStore())
+                       .addBean(Method.class, method())
+                       .addBean(BeanContext.Builder.class, v.get());
+               new BeanCreateMethodFinder<>(BeanContext.class, resource(), bs)
+                       .find(this::matchesInjectScope)
+                       .run(x -> v.get().impl(x));
+               return v.get().build();
+       });
 
        /** The call logger for this operation (delegated to the parent {@link 
RestContext}). */
        private final Memoizer<CallLogger> callLogger = memoizer(() -> 
restContext().getCallLogger());
@@ -495,24 +345,36 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * method scope) REPLACES the result entirely.
         */
        private final Memoizer<EncoderSet> encoders = memoizer(() -> {
-               var bs = restContext().getBeanStore();
-               var b = (encodersBuilder() != null ? encodersBuilder() : 
restContext().builder.encoders()).copy();
+               var bs = beanStore();
+               var b = restContext().builder.encoders().copy();
                getRestOpAnnotationsForProperty(PROPERTY_encoders).forEach(ai 
-> {
-                       var c = ai.getClassArray("encoders", 
org.apache.juneau.encoders.Encoder.class).orElse(null);
+                       var c = ai.getClassArray("encoders", 
Encoder.class).orElse(null);
                        if (nn(c) && c.length > 0)
                                b.set(c);
                });
                var v = Value.of(b.build());
-               new BeanCreateMethodFinder<>(EncoderSet.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(EncoderSet.class, resource(), bs)
                        .find(this::matchesInjectScope)
                        .run(v::set);
                return v.get();
        });
 
        /** The JSON-Schema generator for this operation (op-level annotations 
applied on top of the parent). */
-       private final Memoizer<JsonSchemaGenerator> jsonSchemaGenerator = 
memoizer(() ->
-               jsonSchemaGeneratorBuilder() != null ? 
jsonSchemaGeneratorBuilder().build() : restContext().getJsonSchemaGenerator()
-       );
+       private final Memoizer<JsonSchemaGenerator> jsonSchemaGenerator = 
memoizer(() -> {
+               var aa = appliedAnnotations();
+               var parent = restContext().builder.jsonSchemaGenerator();
+               if (!parent.canApply(aa))
+                       return restContext().getJsonSchemaGenerator();
+               Value<JsonSchemaGenerator.Builder> v = Value.of(parent.copy());
+               v.get().apply(aa);
+               var bs = BasicBeanStore.of(beanStore())
+                       .addBean(Method.class, method())
+                       .addBean(JsonSchemaGenerator.Builder.class, v.get());
+               new BeanCreateMethodFinder<>(JsonSchemaGenerator.class, 
resource(), bs)
+                       .find(this::matchesInjectScope)
+                       .run(x -> v.get().impl(x));
+               return v.get().build();
+       });
 
        /**
         * The parser group for this operation.
@@ -524,29 +386,57 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * {@code @RestInject ParserSet} bean (matching this operation's method 
scope) REPLACES the result.
         */
        private final Memoizer<ParserSet> parsers = memoizer(() -> {
-               var bs = restContext().getBeanStore();
-               var b = (parsersBuilder() != null ? parsersBuilder() : 
restContext().builder.parsers()).copy();
+               var aa = appliedAnnotations();
+               var bs = beanStore();
+               var pb = restContext().builder.parsers();
+               var b = pb.copy();
+               if (pb.canApply(aa))
+                       b.apply(aa);
                getRestOpAnnotationsForProperty(PROPERTY_parsers).forEach(ai -> 
{
                        var c = ai.getClassArray("parsers", 
java.lang.Object.class).orElse(null);
                        if (nn(c) && c.length > 0)
                                b.set(c);
                });
                var result = Value.of(b.build());
-               new BeanCreateMethodFinder<>(ParserSet.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(ParserSet.class, resource(), bs)
                        .find(this::matchesInjectScope)
                        .run(result::set);
                return result.get();
        });
 
        /** The HTTP part parser for this operation (op-level creator applied 
on top of the parent). */
-       private final Memoizer<HttpPartParser> partParser = memoizer(() ->
-               partParserCreator() != null ? partParserCreator().create() : 
restContext().getPartParser()
-       );
+       private final Memoizer<HttpPartParser> partParser = memoizer(() -> {
+               var aa = appliedAnnotations();
+               var parent = restContext().builder.partParser();
+               if (!parent.canApply(aa))
+                       return restContext().getPartParser();
+               Value<HttpPartParser.Creator> v = Value.of(parent.copy());
+               v.get().apply(aa);
+               var bs = BasicBeanStore.of(beanStore())
+                       .addBean(Method.class, method())
+                       .addBean(HttpPartParser.Creator.class, v.get());
+               new BeanCreateMethodFinder<>(HttpPartParser.class, resource(), 
bs)
+                       .find(this::matchesInjectScope)
+                       .run(x -> v.get().impl(x));
+               return v.get().create();
+       });
 
        /** The HTTP part serializer for this operation (op-level creator 
applied on top of the parent). */
-       private final Memoizer<HttpPartSerializer> partSerializer = memoizer(() 
->
-               partSerializerCreator() != null ? 
partSerializerCreator().create() : restContext().getPartSerializer()
-       );
+       private final Memoizer<HttpPartSerializer> partSerializer = memoizer(() 
-> {
+               var aa = appliedAnnotations();
+               var parent = restContext().builder.partSerializer();
+               if (!parent.canApply(aa))
+                       return restContext().getPartSerializer();
+               Value<HttpPartSerializer.Creator> v = Value.of(parent.copy());
+               v.get().apply(aa);
+               var bs = BasicBeanStore.of(beanStore())
+                       .addBean(Method.class, method())
+                       .addBean(HttpPartSerializer.Creator.class, v.get());
+               new BeanCreateMethodFinder<>(HttpPartSerializer.class, 
resource(), bs)
+                       .find(this::matchesInjectScope)
+                       .run(x -> v.get().impl(x));
+               return v.get().create();
+       });
 
        /**
         * The serializer group for this operation.
@@ -558,15 +448,19 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * {@code @RestInject SerializerSet} bean (matching this operation's 
method scope) REPLACES the result.
         */
        private final Memoizer<SerializerSet> serializers = memoizer(() -> {
-               var bs = restContext().getBeanStore();
-               var b = (serializersBuilder() != null ? serializersBuilder() : 
restContext().builder.serializers()).copy();
+               var aa = appliedAnnotations();
+               var bs = beanStore();
+               var sb = restContext().builder.serializers();
+               var b = sb.copy();
+               if (sb.canApply(aa))
+                       b.apply(aa);
                
getRestOpAnnotationsForProperty(PROPERTY_serializers).forEach(ai -> {
-                       var c = ai.getClassArray("serializers", 
org.apache.juneau.serializer.Serializer.class).orElse(null);
+                       var c = ai.getClassArray("serializers", 
Serializer.class).orElse(null);
                        if (nn(c) && c.length > 0)
                                b.set(c);
                });
                var result = Value.of(b.build());
-               new BeanCreateMethodFinder<>(SerializerSet.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(SerializerSet.class, resource(), 
bs)
                        .find(this::matchesInjectScope)
                        .run(result::set);
                return result.get();
@@ -589,7 +483,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        for (var s : 
ai.getStringArray(PROPERTY_defaultRequestAttributes).orElse(EMPTY_STRING_ARRAY))
                                v.get().add(BasicNamedAttribute.ofPair(s));
                });
-               new BeanCreateMethodFinder<>(NamedAttributeMap.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(NamedAttributeMap.class, 
resource(), beanStore())
                        .find(x -> matchesInjectScope(x, 
PROPERTY_defaultRequestAttributes))
                        .run(v::set);
                return v.get();
@@ -621,7 +515,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                                }
                        }
                });
-               new BeanCreateMethodFinder<>(PartList.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(PartList.class, resource(), 
beanStore())
                        .find(x -> matchesInjectScope(x, 
PROPERTY_defaultRequestFormData))
                        .run(v::set);
                return v.get();
@@ -662,7 +556,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                                }
                        }
                });
-               new BeanCreateMethodFinder<>(HeaderList.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(HeaderList.class, resource(), 
beanStore())
                        .find(x -> matchesInjectScope(x, 
PROPERTY_defaultRequestHeaders))
                        .run(v::set);
                return v.get();
@@ -694,7 +588,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                                }
                        }
                });
-               new BeanCreateMethodFinder<>(PartList.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(PartList.class, resource(), 
beanStore())
                        .find(x -> matchesInjectScope(x, 
PROPERTY_defaultRequestQueryData))
                        .run(v::set);
                return v.get();
@@ -717,17 +611,12 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        for (var s : 
ai.getStringArray(PROPERTY_defaultResponseHeaders).orElse(EMPTY_STRING_ARRAY))
                                v.get().setDefault(stringHeader(s));
                });
-               new BeanCreateMethodFinder<>(HeaderList.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(HeaderList.class, resource(), 
beanStore())
                        .find(x -> matchesInjectScope(x, 
PROPERTY_defaultResponseHeaders))
                        .run(v::set);
                return v.get();
        });
 
-       /**
-        * Folds method-parameter {@link Query @Query} annotations (with a 
{@link Schema#default_()} /
-        * {@link Schema#df()} default) into the supplied {@link PartList} 
using {@link PartList#setDefault}
-        * (first wins). Used by the {@link #defaultRequestQueryData} memoizer.
-        */
        /**
         * Iterates over each parameter annotation on the operation method, 
computing the parameter's
         * {@link Schema#default_()}/{@link Schema#df()} string 
(joined-non-blank-first) and dispatching
@@ -759,7 +648,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * name) REPLACES the entire annotation-derived list.
         */
        private final Memoizer<RestConverter[]> converters = memoizer(() -> {
-               var bs = restContext().getBeanStore();
+               var bs = beanStore();
                var v = Value.of(RestConverterList.create(bs));
                if (isInherited(PROPERTY_converters))
                        
restContext().getRestAnnotationsForProperty(PROPERTY_converters)
@@ -770,7 +659,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                                        v.get().append(classArray(c));
                        }));
                bs.getBean(RestConverterList.class).ifPresent(x -> 
v.get().impl(x));
-               new BeanCreateMethodFinder<>(RestConverterList.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(RestConverterList.class, 
resource(), bs)
                        .find(this::matchesInjectScope)
                        .run(x -> v.get().impl(x));
                return v.get().build().asArray();
@@ -840,12 +729,12 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * with matching {@code methodScope}) REPLACES the entire 
annotation-derived list (Decision #1).
         */
        private final Memoizer<RestGuard[]> guards = memoizer(() -> {
-               var bs = restContext().getBeanStore();
+               var bs = beanStore();
                var v = Value.of(RestGuardList.create(bs));
                var rolesDeclaredSet = new java.util.LinkedHashSet<String>();
                var roleGuardStrs = new ArrayList<String>();
 
-               java.util.function.Consumer<AnnotationInfo<?>> walk = ai -> {
+               Consumer<AnnotationInfo<?>> walk = ai -> {
                        ai.getClassArray("guards", 
RestGuard.class).ifPresent(classes -> {
                                for (var c : classes)
                                        v.get().append(classArray(c));
@@ -873,7 +762,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                }
 
                bs.getBean(RestGuardList.class).ifPresent(x -> v.get().impl(x));
-               new BeanCreateMethodFinder<>(RestGuardList.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(RestGuardList.class, resource(), 
bs)
                        .find(this::matchesInjectScope)
                        .run(x -> v.get().impl(x));
                return v.get().build().asArray();
@@ -893,7 +782,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * method with matching {@code methodScope}) REPLACES the entire 
annotation-derived list.
         */
        private final Memoizer<RestMatcherList> matchersList = memoizer(() -> {
-               var bs = restContext().getBeanStore();
+               var bs = beanStore();
                var v = Value.of(RestMatcherList.create(bs));
                var clientVersion = new String[]{null};
 
@@ -909,7 +798,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        v.get().append(new 
ClientVersionMatcher(restContext().getClientVersionHeader(), 
MethodInfo.of(method())));
 
                bs.getBean(RestMatcherList.class).ifPresent(x -> 
v.get().impl(x));
-               new BeanCreateMethodFinder<>(RestMatcherList.class, 
restContext().getResource(), bs)
+               new BeanCreateMethodFinder<>(RestMatcherList.class, resource(), 
bs)
                        .find(this::matchesInjectScope)
                        .run(x -> v.get().impl(x));
                return v.get().build();
@@ -989,7 +878,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        v.get().add(UrlPathMatcher.of(p));
                }
 
-               new BeanCreateMethodFinder<>(UrlPathMatcherList.class, 
restContext().getResource(), restContext().getBeanStore())
+               new BeanCreateMethodFinder<>(UrlPathMatcherList.class, 
resource(), beanStore())
                        .addBean(UrlPathMatcherList.class, v.get())
                        .find(this::matchesInjectScope)
                        .run(v::set);
@@ -1082,7 +971,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         * @return The resolved string, or empty if no annotation defines it.
         */
        private Optional<String> findOpString(String attr) {
-               var vr = restContext().getVarResolver();
+               var vr = varResolver();
                for (var ai : getRestOpAnnotations()) {
                        var s = ai.getString(attr).orElse("");
                        if (!s.isEmpty()) {
@@ -1096,7 +985,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
 
        private List<MediaType> collectAnnotationMediaTypes(String attr) {
                var result = new ArrayList<MediaType>();
-               var vr = restContext().getVarResolver();
+               var vr = varResolver();
                // Class-level @Rest(consumes|produces) first (when inheritance 
is allowed), then op-level overrides append.
                if (isInherited(attr)) {
                        for (var ai : restContext().getRestAnnotations())
@@ -1185,16 +1074,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        // Capture the annotation work-list before the builder 
becomes eligible for GC.
                        appliedAnnotations = builder.getApplied();
 
-                       // Capture sub-builder fields (raw field access — null 
means no op annotations touched that slot).
-                       // The memoizer findXxx() methods check for null and 
fall through to the parent context value.
-                       beanContextBuilder = builder.beanContext;
-                       encodersBuilder = builder.encoders;
-                       jsonSchemaGeneratorBuilder = 
builder.jsonSchemaGenerator;
-                       parsersBuilder = builder.parsers;
-                       partParserCreator = builder.partParser;
-                       partSerializerCreator = builder.partSerializer;
-                       serializersBuilder = builder.serializers;
-
                        context = builder.restContext;
                        method = builder.restMethod;
 
@@ -1226,13 +1105,13 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        bs.add(UrlPathMatcher[].class, pm);
                        bs.addBean(UrlPathMatcher.class, pm.length > 0 ? pm[0] 
: null);
 
-               int hierarchyDepthTemp = 0;
-               var sc = method.getDeclaringClass().getSuperclass();
-               while (nn(sc)) {
-                       hierarchyDepthTemp++;
-                       sc = sc.getSuperclass();
-               }
-               hierarchyDepth = hierarchyDepthTemp;
+                       int hierarchyDepthTemp = 0;
+                       var sc = method.getDeclaringClass().getSuperclass();
+                       while (nn(sc)) {
+                               hierarchyDepthTemp++;
+                               sc = sc.getSuperclass();
+                       }
+                       hierarchyDepth = hierarchyDepthTemp;
 
                        responseMeta = ResponseBeanMeta.create(mi, 
appliedAnnotations);
 

Reply via email to