This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/main by this push:
     new 6043f835690 CAUSEWAY-3883: remove WrappingObject from formal API
6043f835690 is described below

commit 6043f835690936a199225a1ba172d4caf290e4d8
Author: Andi Huber <[email protected]>
AuthorDate: Wed Jun 25 13:27:29 2025 +0200

    CAUSEWAY-3883: remove WrappingObject from formal API
    
    - this is an implementation detail, most likely not of interest to
    framework consumers
---
 .../runtime/wrap/WrapperInvocationHandler.java     |  1 -
 .../core/runtime/wrap}/WrappingObject.java         | 29 +++++++++++-----------
 .../wrapper/WrapperFactoryDefault.java             | 10 ++++----
 .../handlers/DomainObjectInvocationHandler.java    |  2 +-
 .../wrapper/handlers/ProxyGenerator.java           | 16 +++---------
 .../wrapper/WrapperFactoryDefaultTest.java         |  2 +-
 .../ProxyCreatorTestUsingCodegenPlugin.java        |  2 +-
 7 files changed, 27 insertions(+), 35 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrapperInvocationHandler.java
 
b/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrapperInvocationHandler.java
index be33af23eb5..1a087d6420e 100644
--- 
a/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrapperInvocationHandler.java
+++ 
b/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrapperInvocationHandler.java
@@ -25,7 +25,6 @@
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
 
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import org.apache.causeway.applib.services.wrapper.control.ExecutionMode;
 import org.apache.causeway.commons.internal._Constants;
 import org.apache.causeway.commons.internal.base._Lazy;
diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/WrappingObject.java
 
b/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrappingObject.java
similarity index 88%
rename from 
api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/WrappingObject.java
rename to 
core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrappingObject.java
index 0f447d8ce04..e4db23562c4 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/services/wrapper/WrappingObject.java
+++ 
b/core/runtime/src/main/java/org/apache/causeway/core/runtime/wrap/WrappingObject.java
@@ -16,47 +16,48 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.applib.services.wrapper;
+package org.apache.causeway.core.runtime.wrap;
 
 import java.lang.reflect.Modifier;
 import java.util.List;
 
 import org.jspecify.annotations.Nullable;
 
+import org.apache.causeway.applib.services.wrapper.WrapperFactory;
 import org.apache.causeway.applib.services.wrapper.control.SyncControl;
 import 
org.apache.causeway.commons.internal.proxy._ProxyFactoryService.AdditionalField;
 import org.apache.causeway.commons.internal.reflection._Reflect;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
 
 import lombok.SneakyThrows;
 
 /**
  * Implemented by all objects that have been viewed as per
  * {@link WrapperFactory#wrap(Object)}.
- * 
+ *
  * @implNote domain classes may not have methods with <tt>__causeway_</tt> 
prefix
- * 
+ *
  * @apiNote requires the mechanism that creates proxies implementing {@link 
WrappingObject}
- *      to additionally create the {@code __causeway_origin_field}. 
+ *      to additionally create the {@code __causeway_origin_field}.
  *
  * @since 1.x, revised for 3.4 {@index}
  */
 public interface WrappingObject {
-    
+
     final static String ORIGIN_GETTER_NAME = "__causeway_origin";
     final static String ORIGIN_FIELD_NAME = "__causeway_origin_field";
     final static String SAVE_METHOD_NAME = "__causeway_save";
-    
+
     final static List<AdditionalField> ADDITIONAL_FIELDS = List.of(
             new AdditionalField(ORIGIN_FIELD_NAME, 
WrappingObject.Origin.class, Modifier.PROTECTED));
-    
-    //TODO perhaps move to a module that sees ManagedObject
+
     record Origin(
             Object pojo,
             /**
              * The mixee adapted as a ManagedObject, used only if pojo is a 
mixin.
              */
-            @Nullable Object managedMixee, 
-            SyncControl syncControl, 
+            @Nullable ManagedObject managedMixee,
+            SyncControl syncControl,
             boolean isFallback) {
         /**
          * fallback, used for non-proxied target, with no execute (no verify 
no rule checking).
@@ -67,13 +68,13 @@ public static Origin fallback(Object target) {
         /**
          * fallback, used for non-proxied target as mixin, with no execute (no 
verify no rule checking)
          */
-        public static Origin fallbackMixin(Object target, Object managedMixee) 
{
+        public static Origin fallbackMixin(Object target, ManagedObject 
managedMixee) {
             return new Origin(target, managedMixee, 
SyncControl.control().withNoExecute(), true);
         }
         public Origin(Object pojo, SyncControl syncControl) {
             this(pojo, null, syncControl, false);
         }
-        public Origin(Object pojo, Object managedMixee, SyncControl 
syncControl) {
+        public Origin(Object pojo, ManagedObject managedMixee, SyncControl 
syncControl) {
             this(pojo, managedMixee, syncControl, false);
         }
     }
@@ -91,7 +92,7 @@ static Origin getOrigin(WrappingObject proxyObject)  {
         var field = proxyObject.getClass().getDeclaredField(ORIGIN_FIELD_NAME);
         return (Origin) _Reflect.getFieldOn(field, proxyObject);
     }
-    
+
     /**
      * Wither for the underlying {@link Origin}.
      */
@@ -101,7 +102,7 @@ static <T> T withOrigin(T proxyObject, Origin origin) {
         _Reflect.setFieldOn(field, proxyObject, origin);
         return proxyObject;
     }
-    
+
     /**
      * Programmatic equivalent of invoking save for a transient object .
      */
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
index 4ac9f090929..df197befd95 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
@@ -58,7 +58,6 @@
 import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.applib.services.repository.RepositoryService;
 import org.apache.causeway.applib.services.wrapper.WrapperFactory;
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import org.apache.causeway.applib.services.wrapper.callable.AsyncCallable;
 import org.apache.causeway.applib.services.wrapper.control.AsyncControl;
 import org.apache.causeway.applib.services.wrapper.control.ExecutionMode;
@@ -99,6 +98,7 @@
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import 
org.apache.causeway.core.runtime.wrap.WrapperInvocationHandler.WrapperInvocation;
+import org.apache.causeway.core.runtime.wrap.WrappingObject;
 import 
org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
 import org.apache.causeway.core.runtimeservices.session.InteractionIdGenerator;
 import 
org.apache.causeway.core.runtimeservices.wrapper.dispatchers.InteractionEventDispatcher;
@@ -233,8 +233,8 @@ public <T> T wrapMixin(
         // no need to inject services into the mixin, factoryService does it 
for us.
 
         if (isWrapper(mixee)) {
-            var wrapperObject = (WrappingObject) mixee;
-            var origin = wrapperObject.__causeway_origin();
+            var wrappingObject = (WrappingObject) mixee;
+            var origin = wrappingObject.__causeway_origin();
             var underlyingMixee = origin.pojo();
 
             getServiceInjector().injectServicesInto(underlyingMixee);
@@ -301,7 +301,7 @@ public <T,R> T asyncWrap(
             }
 
             if (asyncControl.isCheckRules()) {
-                var doih = 
proxyGenerator.handlerForRegular(targetAdapter.objSpec());
+                var doih = proxyGenerator.handler(targetAdapter.objSpec());
                 doih.invoke(domainObject, method, args);
             }
 
@@ -342,7 +342,7 @@ public <T, R> T asyncWrapMixin(
             }
 
             if (asyncControl.isCheckRules()) {
-                var doih = 
proxyGenerator.handlerForMixin(managedMixin.objSpec());
+                var doih = proxyGenerator.handler(managedMixin.objSpec());
                 var origin = WrappingObject.Origin.fallbackMixin(mixin, 
managedMixee);
                 doih.invoke(new WrapperInvocation(origin, method, args));
             }
diff --git 
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
index a9bbfca8e77..3badeb16cf0 100644
--- 
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
@@ -29,7 +29,6 @@
 import org.apache.causeway.applib.services.wrapper.DisabledException;
 import org.apache.causeway.applib.services.wrapper.HiddenException;
 import org.apache.causeway.applib.services.wrapper.InvalidException;
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import 
org.apache.causeway.applib.services.wrapper.events.CollectionAccessEvent;
 import org.apache.causeway.applib.services.wrapper.events.InteractionEvent;
 import org.apache.causeway.applib.services.wrapper.events.PropertyAccessEvent;
@@ -61,6 +60,7 @@
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.core.runtime.wrap.WrapperInvocationHandler;
+import org.apache.causeway.core.runtime.wrap.WrappingObject;
 
 import lombok.Getter;
 import lombok.SneakyThrows;
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyGenerator.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyGenerator.java
index ed24161f121..55e8421968b 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyGenerator.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyGenerator.java
@@ -24,7 +24,6 @@
 
 import org.jspecify.annotations.NonNull;
 
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import org.apache.causeway.applib.services.wrapper.control.SyncControl;
 import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.commons.internal.context._Context;
@@ -34,6 +33,7 @@
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.core.runtime.wrap.WrapperInvocationHandler;
+import org.apache.causeway.core.runtime.wrap.WrappingObject;
 
 public record ProxyGenerator(@NonNull _ProxyFactoryService 
proxyFactoryService) {
 
@@ -42,8 +42,7 @@ public <T> T objectProxy(
         final ObjectSpecification domainObjectSpec,
         final SyncControl syncControl) {
 
-        var invocationHandler = handlerForRegular(domainObjectSpec);
-        return instantiateProxy(invocationHandler, new 
WrappingObject.Origin(domainObject, syncControl));
+        return instantiateProxy(handler(domainObjectSpec), new 
WrappingObject.Origin(domainObject, syncControl));
     }
 
     public <T> T mixinProxy(
@@ -52,8 +51,7 @@ public <T> T mixinProxy(
             final ObjectSpecification mixinSpec,
             final SyncControl syncControl) {
     
-        var invocationHandler = handlerForMixin(mixinSpec);
-        return instantiateProxy(invocationHandler, new 
WrappingObject.Origin(mixin, managedMixee, syncControl));
+        return instantiateProxy(handler(mixinSpec), new 
WrappingObject.Origin(mixin, managedMixee, syncControl));
     }
     
     /**
@@ -116,16 +114,10 @@ private <T, P> P instantiatePluralProxy(final Class<T> 
base, final PluralInvocat
         return _Casts.uncheckedCast(proxyWithoutFields);
     }
 
-    public WrapperInvocationHandler handlerForRegular(ObjectSpecification 
targetSpec) {
+    public WrapperInvocationHandler handler(ObjectSpecification targetSpec) {
         return new DomainObjectInvocationHandler(
                 targetSpec,
                 this);
     }
-
-    public WrapperInvocationHandler handlerForMixin(ObjectSpecification 
mixinSpec) {
-        return new DomainObjectInvocationHandler(
-                mixinSpec,
-                this);
-    }
     
 }
diff --git 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefaultTest.java
 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefaultTest.java
index 6f8ef3e6140..9331895caca 100644
--- 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefaultTest.java
+++ 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefaultTest.java
@@ -28,12 +28,12 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.contains;
 
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import org.apache.causeway.applib.services.wrapper.control.ExecutionMode;
 import org.apache.causeway.applib.services.wrapper.control.SyncControl;
 import org.apache.causeway.commons.internal.proxy._ProxyFactoryService;
 import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.causeway.core.metamodel.execution.MemberExecutorService;
+import org.apache.causeway.core.runtime.wrap.WrappingObject;
 
 import lombok.RequiredArgsConstructor;
 
diff --git 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyCreatorTestUsingCodegenPlugin.java
 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyCreatorTestUsingCodegenPlugin.java
index 466e6f7832c..4df6e38801f 100644
--- 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyCreatorTestUsingCodegenPlugin.java
+++ 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/ProxyCreatorTestUsingCodegenPlugin.java
@@ -30,10 +30,10 @@
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.causeway.applib.services.wrapper.WrappingObject;
 import org.apache.causeway.applib.services.wrapper.control.SyncControl;
 import 
org.apache.causeway.core.codegen.bytebuddy.services.ProxyFactoryServiceByteBuddy;
 import org.apache.causeway.core.runtime.wrap.WrapperInvocationHandler;
+import org.apache.causeway.core.runtime.wrap.WrappingObject;
 
 import lombok.Getter;
 import lombok.Setter;

Reply via email to