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);
          }

Reply via email to