This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch v4 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 46449e14fa43deb30cd26d9d497280be3d8623dd Merge: 1e8d6ab606c 9961569386d Author: Andi Huber <[email protected]> AuthorDate: Wed Jun 18 14:00:44 2025 +0200 Merge remote-tracking branch 'origin/main' into v4 .../applib/services/wrapper/WrappingObject.java | 9 +- .../runtime/wrap/WrapperInvocationHandler.java | 57 +++--- .../wrapper/WrapperFactoryDefault.java | 15 +- .../handlers/DomainObjectInvocationHandler.java | 210 ++++++++++----------- .../wrapper/handlers/PluralInvocationHandler.java | 18 +- .../wrapper/handlers/ProxyGenerator.java | 31 ++- .../wrapper/WrapperFactoryDefaultTest.java | 2 +- .../ProxyCreatorTestUsingCodegenPlugin.java | 25 ++- 8 files changed, 181 insertions(+), 186 deletions(-) diff --cc core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java index 55e2b1b66e4,89d576f1185..990bc9bbfa9 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java @@@ -78,13 -74,13 +75,13 @@@ import lombok.experimental.Accessors * * @param <T> type of delegate */ -@Log4j2 +@Slf4j - public final class DomainObjectInvocationHandler<T> + final class DomainObjectInvocationHandler<T> implements WrapperInvocationHandler { - @Getter(onMethod_ = {@Override}) @Accessors(fluent=true) + @Getter(onMethod_ = {@Override}) @Accessors(fluent=true) - private final WrapperInvocationHandler.Context context; + private final WrapperInvocationHandler.ClassMetaData classMetaData; - + private final ProxyGenerator proxyGenerator; private final MetaModelContext mmc; @@@ -97,7 -93,7 +94,7 @@@ * The <tt>__causeway_origin()</tt> method from {@link WrappingObject#__causeway_origin()}. */ protected final Method __causeway_originMethod; -- ++ /** * The <tt>__causeway_save()</tt> method from {@link WrappingObject#__causeway_save()}. */ @@@ -115,14 -111,10 +112,10 @@@ final T domainObject, final ManagedObject mixeeAdapter, // ignored if not handling a mixin final ManagedObject targetAdapter, - final SyncControl syncControl, final ProxyGenerator proxyGenerator) { - + this.mmc = targetAdapter.objSpec().getMetaModelContext(); - this.context = WrapperInvocationHandler.Context.of( - mmc, - domainObject, - syncControl); + this.classMetaData = WrapperInvocationHandler.ClassMetaData.of(domainObject); this.proxyGenerator = proxyGenerator; var _titleMethod = (Method)null; @@@ -147,26 -139,20 +140,20 @@@ this.mixeeAdapter = mixeeAdapter; } - /** - * @param target - either the pojo directly or the proxy instance that is the target of invocation - * @param method - the method invoked on the proxy - * @param args - the args to the method invoked on the proxy - * @throws Throwable - */ @Override - public Object invoke(final Object target, final Method method, final Object[] args) throws Throwable { - - Objects.requireNonNull(target); - final var delegate = target instanceof WrappingObject wrappingObject - ? context().origin(wrappingObject).pojo() - : target; // fallback to argument directly passed in - - if (context().isObjectMethod(method) + public Object invoke(WrapperInvocation wrapperInvocation) throws Throwable { - ++ + final Object target = wrapperInvocation.origin().pojo(); + final Method method = wrapperInvocation.method(); + final Object[] args = wrapperInvocation.args(); - var syncControl = wrapperInvocation.origin().syncControl(); - ++ var syncControl = wrapperInvocation.origin().syncControl(); ++ + if (classMetaData().isObjectMethod(method) || isEnhancedEntityMethod(method)) { - return method.invoke(delegate, args); + return method.invoke(target, args); } - final ManagedObject targetAdapter = mmc.getObjectManager().adapt(delegate); + final ManagedObject targetAdapter = mmc.getObjectManager().adapt(target); if(!targetAdapter.specialization().isMixin()) { MmAssertionUtils.assertIsBookmarkSupported(targetAdapter); @@@ -180,19 -166,19 +167,19 @@@ var resolvedMethod = _GenericResolver.resolveMethod(method, targetSpec.getCorrespondingClass()) .orElseThrow(); - if(target instanceof WrappingObject) { - + if(!wrapperInvocation.origin().isFallback()) { - ++ if (method.equals(__causeway_originMethod)) { - return delegate; + return wrapperInvocation.origin(); } -- ++ // save method, through the proxy if (method.equals(__causeway_saveMethod)) { - return handleSaveMethod(targetAdapter, targetSpec); + return handleSaveMethod(wrapperInvocation, targetAdapter, targetSpec); } -- ++ if (method.equals(__causeway_executionModes)) { - return context().syncControl().getExecutionModes(); + return syncControl.getExecutionModes(); } } @@@ -311,7 -297,9 +298,9 @@@ : false; } - private Object handleTitleMethod(final ManagedObject targetAdapter) { + private Object handleTitleMethod( - final WrapperInvocation wrapperInvocation, ++ final WrapperInvocation wrapperInvocation, + final ManagedObject targetAdapter) { var targetNoSpec = targetAdapter.objSpec(); var titleContext = targetNoSpec @@@ -322,11 -310,13 +311,13 @@@ } private Object handleSaveMethod( - final ManagedObject targetAdapter, final ObjectSpecification targetNoSpec) { - final WrapperInvocation wrapperInvocation, - final ManagedObject targetAdapter, ++ final WrapperInvocation wrapperInvocation, ++ final ManagedObject targetAdapter, + final ObjectSpecification targetNoSpec) { - runValidationTask(()->{ + runValidationTask(wrapperInvocation, ()->{ var interactionResult = - targetNoSpec.isValidResult(targetAdapter, getInteractionInitiatedBy()); + targetNoSpec.isValidResult(targetAdapter, getInteractionInitiatedBy(wrapperInvocation)); notifyListenersAndVetoIfRequired(interactionResult); }); @@@ -359,9 -350,9 +351,9 @@@ var currentReferencedObj = MmUnwrapUtils.single(currentReferencedAdapter); - context().notifyListeners(new PropertyAccessEvent( - targetAdapter.getPojo(), - property.getFeatureIdentifier(), + mmc.getWrapperFactory().notifyListeners(new PropertyAccessEvent( - targetAdapter.getPojo(), - property.getFeatureIdentifier(), ++ targetAdapter.getPojo(), ++ property.getFeatureIdentifier(), currentReferencedObj)); return currentReferencedObj; @@@ -419,14 -412,16 +413,16 @@@ var collectionAccessEvent = new CollectionAccessEvent(currentReferencedObj, collection.getFeatureIdentifier()); if (currentReferencedObj instanceof Collection) { - var collectionViewObject = lookupWrappingObject( - (Collection<?>) currentReferencedObj, collection); - context().notifyListeners(collectionAccessEvent); + var collectionViewObject = wrapCollection( - (Collection<?>) currentReferencedObj, ++ (Collection<?>) currentReferencedObj, + collection); + mmc.getWrapperFactory().notifyListeners(collectionAccessEvent); return collectionViewObject; } else if (currentReferencedObj instanceof Map) { - var mapViewObject = lookupWrappingObject((Map<?, ?>) currentReferencedObj, - var mapViewObject = wrapMap( ++ var mapViewObject = wrapMap( + (Map<?, ?>) currentReferencedObj, collection); - context().notifyListeners(collectionAccessEvent); + mmc.getWrapperFactory().notifyListeners(collectionAccessEvent); return mapViewObject; } @@@ -548,7 -540,8 +541,8 @@@ private void notifyListenersAndVetoIfRequired(final InteractionResult interactionResult) { var interactionEvent = interactionResult.getInteractionEvent(); - context().notifyListeners(interactionEvent); - ++ + mmc.getWrapperFactory().notifyListeners(interactionEvent); if (interactionEvent.isVeto()) { throw toException(interactionEvent); }
