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)

Reply via email to