From 48f0ac32a2936dbc0030f98b47c762e92ef4ca88 Mon Sep 17 00:00:00 2001 From: Koen Aers Date: Sat, 1 Jul 2023 13:21:42 +0200 Subject: [PATCH] HBX-2390: Create a JBoss Tools adaptation layer in Hibernate Tools - Add new test case 'org.hibernate.tool.orm.jbt.wrp.ValueWrapperFactoryTest#testGetCollectionElement()' - Modify method 'org.hibernate.tool.orm.jbt.wrp.ValueWrapperFactory.ValueWrapperInvocationHandler#invoke(...)' to handle wrap a potential Value result value in the ValueExtension case Signed-off-by: Koen Aers --- .../tool/orm/jbt/wrp/ValueWrapperFactory.java | 12 +++++++++--- .../tool/orm/jbt/wrp/ValueWrapperFactoryTest.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java index a0ac1be2b2..3986e32f1a 100644 --- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java @@ -115,20 +115,26 @@ public ValueWrapperInvocationHandler(Value value) { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + Object result = null; try { Method valueClassMethod = lookupMethodInValueClass(extendedValue, method); if (valueClassMethod != null) { - Object result = valueClassMethod.invoke(extendedValue, args); + result = valueClassMethod.invoke(extendedValue, args); if (result != null && valueClassMethod.getReturnType().isAssignableFrom(Value.class)) { result = ValueWrapperFactory.createValueWrapper((Value)result); } - return result; } else { - return method.invoke(this, args); + result = method.invoke(this, args); + if (!"getWrappedObject".equals(method.getName()) + && result != null + && method.getReturnType().isAssignableFrom(Value.class)) { + result = ValueWrapperFactory.createValueWrapper((Value)result); + } } } catch (InvocationTargetException e) { throw e.getTargetException(); } + return result; } @Override diff --git a/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactoryTest.java b/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactoryTest.java index e96d77a66e..f15779d222 100644 --- a/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactoryTest.java +++ b/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactoryTest.java @@ -32,4 +32,15 @@ public void testGetElement() { assertNull(valueWrapper.getElement()); } + @Test + public void testGetCollectionElement() { + List valueTarget = new List(DummyMetadataBuildingContext.INSTANCE, null); + Value basicValue = new BasicValue(DummyMetadataBuildingContext.INSTANCE); + ValueWrapper valueWrapper = ValueWrapperFactory.createValueWrapper(valueTarget); + valueTarget.setElement(basicValue); + assertSame(basicValue, ((Wrapper)valueWrapper.getCollectionElement()).getWrappedObject()); + valueTarget.setElement(null); + assertNull(valueWrapper.getCollectionElement()); + } + }