This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 083b2859b3 CAUSEWAY-3418: fixes collection-memento for element types
that are abstract and have an inherited local-type
083b2859b3 is described below
commit 083b2859b30f796778f0793bedf579b62041dc8d
Author: andi-huber <[email protected]>
AuthorDate: Thu Apr 13 07:26:43 2023 +0200
CAUSEWAY-3418: fixes collection-memento for element types that are
abstract and have an inherited local-type
---
.../core/metamodel/objectmanager/ObjectManagerDefault.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManagerDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManagerDefault.java
index 345de4ebcc..d2aa5e15c0 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManagerDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManagerDefault.java
@@ -78,6 +78,8 @@ public class ObjectManagerDefault implements ObjectManager {
if(memento instanceof ObjectMementoForEmpty) {
val objectMementoForEmpty = (ObjectMementoForEmpty) memento;
val logicalType = objectMementoForEmpty.getLogicalType();
+ /* note: we recover from (corresponding) class not
logical-type-name,
+ * as the latter can be ambiguous, when shared in a type
hierarchy*/
val spec =
getSpecificationLoader().specForLogicalType(logicalType);
return spec.isPresent()
? ManagedObject.empty(spec.get())
@@ -87,7 +89,10 @@ public class ObjectManagerDefault implements ObjectManager {
if(memento instanceof ObjectMementoCollection) {
val objectMementoCollection = (ObjectMementoCollection) memento;
- val elementSpec =
getSpecificationLoader().specForLogicalTypeNameElseFail(memento.getLogicalTypeName());
+ val logicalType = objectMementoCollection.getLogicalType();
+ /* note: we recover from (corresponding) class not
logical-type-name,
+ * as the latter can be ambiguous, when shared in a type
hierarchy*/
+ val elementSpec =
getSpecificationLoader().specForLogicalTypeElseFail(logicalType);
val objects = objectMementoCollection.unwrapList().stream()
.map(this::demementify)