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;