From d49ff54ba5ef5ba8c88468f258feff4d7a38b777 Mon Sep 17 00:00:00 2001 From: Jan Martiska Date: Tue, 21 Apr 2020 14:02:53 +0200 Subject: [PATCH] Correctly record Optionals containing custom classes --- .../quarkus/deployment/recording/BytecodeRecorderImpl.java | 7 +++++++ .../deployment/recording/BytecodeRecorderTestCase.java | 5 +++++ 2 files changed, 12 insertions(+) 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);