Skip to content

Commit 6c0ce18

Browse files
committed
REST Client - Avoid creating a field for NOOP HeaderFiller
And move the HeaderFiller to a static field as from what I can see, it's never dependent of the current invocation.
1 parent aa433ad commit 6c0ce18

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

extensions/resteasy-reactive/rest-client/deployment/src/main/java/io/quarkus/rest/client/reactive/deployment/MicroProfileRestClientEnricher.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ public void forSubResourceMethod(ClassCreator subClassCreator, MethodCreator sub
509509
collectHeaderFillers(subInterfaceClass, subMethod, headerFillersByName);
510510
String subHeaderFillerName = subInterfaceClass.name().toString() + sha1(rootInterfaceClass.name().toString()) +
511511
"$$" + methodIndex + "$$" + subMethodIndex;
512-
createAndReturnHeaderFiller(subClassCreator, subConstructor, subMethodCreator, subMethod,
512+
createAndReturnHeaderFiller(subClassCreator, subClinit, subMethodCreator, subMethod,
513513
invocationBuilder, index, generatedClasses, subMethodIndex, subHeaderFillerName, headerFillersByName,
514514
Collections.emptyList());
515515
}
@@ -535,7 +535,7 @@ public void forMethod(ClassCreator classCreator, MethodCreator constructor,
535535
clientBasicAuth.value("password").asString()));
536536
}
537537

538-
createAndReturnHeaderFiller(classCreator, constructor, methodCreator, method,
538+
createAndReturnHeaderFiller(classCreator, clinit, methodCreator, method,
539539
invocationBuilder, index, generatedClasses, methodIndex,
540540
interfaceClass + "$$" + method.name() + "$$" + methodIndex, headerFillersByName, enhancers);
541541
}
@@ -593,18 +593,19 @@ public void accept(AddHeadersEnhancer.Context context) {
593593
}
594594
}
595595

596-
private void createAndReturnHeaderFiller(ClassCreator classCreator, MethodCreator constructor,
596+
private void createAndReturnHeaderFiller(ClassCreator classCreator, MethodCreator clinit,
597597
MethodCreator methodCreator, MethodInfo method,
598598
AssignableResultHandle invocationBuilder, IndexView index,
599599
BuildProducer<GeneratedClassBuildItem> generatedClasses, int methodIndex, String fillerClassName,
600600
Map<String, ParamData> headerFillersByName,
601601
List<AddHeadersEnhancer> addHeadersEnhancers) {
602-
FieldDescriptor headerFillerField = FieldDescriptor.of(classCreator.getClassName(),
603-
"headerFiller" + methodIndex, HeaderFiller.class);
604-
classCreator.getFieldCreator(headerFillerField).setModifiers(Modifier.PRIVATE | Modifier.FINAL);
605-
ResultHandle headerFiller;
602+
FieldDescriptor headerFillerField = null;
606603
// create header filler for this method if headerFillersByName is not empty
607604
if (!headerFillersByName.isEmpty() || !addHeadersEnhancers.isEmpty()) {
605+
headerFillerField = FieldDescriptor.of(classCreator.getClassName(),
606+
"headerFiller" + methodIndex, HeaderFiller.class);
607+
classCreator.getFieldCreator(headerFillerField).setModifiers(Modifier.STATIC | Modifier.PRIVATE | Modifier.FINAL);
608+
608609
GeneratedClassGizmoAdaptor classOutput = new GeneratedClassGizmoAdaptor(generatedClasses, true);
609610
try (ClassCreator headerFillerClass = ClassCreator.builder().className(fillerClassName)
610611
.interfaces(ExtendedHeaderFiller.class)
@@ -654,19 +655,17 @@ public ResultHandle requestContextHandle() {
654655

655656
addHeaders.returnValue(null);
656657

657-
headerFiller = constructor.newInstance(MethodDescriptor.ofConstructor(fillerClassName));
658+
ResultHandle headerFiller = clinit.newInstance(MethodDescriptor.ofConstructor(fillerClassName));
659+
clinit.writeStaticField(headerFillerField, headerFiller);
658660
}
659-
} else {
660-
headerFiller = constructor
661-
.readStaticField(FieldDescriptor.of(NoOpHeaderFiller.class, "INSTANCE", NoOpHeaderFiller.class));
662661
}
663-
constructor.writeInstanceField(headerFillerField, constructor.getThis(), headerFiller);
664662

665-
ResultHandle headerFillerAsObject = methodCreator.checkCast(
666-
methodCreator.readInstanceField(headerFillerField, methodCreator.getThis()), Object.class);
667663
methodCreator.assign(invocationBuilder,
668664
methodCreator.invokeInterfaceMethod(INVOCATION_BUILDER_PROPERTY_METHOD, invocationBuilder,
669-
methodCreator.load(HeaderFiller.class.getName()), headerFillerAsObject));
665+
methodCreator.load(HeaderFiller.class.getName()),
666+
headerFillerField != null ? methodCreator.readStaticField(headerFillerField)
667+
: methodCreator.readStaticField(
668+
FieldDescriptor.of(NoOpHeaderFiller.class, "INSTANCE", NoOpHeaderFiller.class))));
670669

671670
ResultHandle parametersList = null;
672671
if (method.parametersCount() == 0) {

0 commit comments

Comments
 (0)