diff --git a/core/deployment/src/main/java/io/quarkus/deployment/recording/BytecodeRecorderImpl.java b/core/deployment/src/main/java/io/quarkus/deployment/recording/BytecodeRecorderImpl.java index c00565a70142c..9176291ea0c8f 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/recording/BytecodeRecorderImpl.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/recording/BytecodeRecorderImpl.java @@ -547,6 +547,13 @@ ResultHandle createValue(MethodContext creator, MethodCreator method, ResultHand if (val.isPresent()) { DeferredParameter res = loadObjectInstance(val.get(), existing, Object.class); return new DeferredArrayStoreParameter() { + + @Override + void doPrepare(MethodContext context) { + res.prepare(context); + super.doPrepare(context); + } + @Override ResultHandle createValue(MethodContext context, MethodCreator method, ResultHandle array) { return method.invokeStaticMethod(ofMethod(Optional.class, "of", Optional.class, Object.class), diff --git a/core/deployment/src/test/java/io/quarkus/deployment/recording/BytecodeRecorderTestCase.java b/core/deployment/src/test/java/io/quarkus/deployment/recording/BytecodeRecorderTestCase.java index bea9305032725..a11627f4a6760 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/recording/BytecodeRecorderTestCase.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/recording/BytecodeRecorderTestCase.java @@ -270,6 +270,11 @@ public void testObjects() throws Exception { TestRecorder recorder = generator.getRecordingProxy(TestRecorder.class); recorder.object(emptyOptional); }, emptyOptional); + Optional optionalWithCustomClass = Optional.of(new TestJavaBean()); + runTest(generator -> { + TestRecorder recorder = generator.getRecordingProxy(TestRecorder.class); + recorder.object(optionalWithCustomClass); + }, optionalWithCustomClass); URL url = new URL("https://quarkus.io"); runTest(generator -> { TestRecorder recorder = generator.getRecordingProxy(TestRecorder.class);