You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/07/30 10:19:40 UTC

[isis] branch master updated: ISIS-2830: fixes potential NPE when cached managedProperty is no longer valid

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/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new e5c4d29  ISIS-2830: fixes potential NPE when cached managedProperty is no longer valid
e5c4d29 is described below

commit e5c4d292eb5a68956435a78f20cfde15ccd7e1ab
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jul 30 12:19:29 2021 +0200

    ISIS-2830: fixes potential NPE when cached managedProperty is no longer
    valid
---
 .../viewer/wicket/model/models/ScalarPropertyModel.java | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index 79e33cb..ac17e97 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.spec.feature.memento.PropertyMemento;
 import org.apache.isis.viewer.common.model.feature.PropertyUiModel;
 
+import lombok.NonNull;
 import lombok.val;
 
 public class ScalarPropertyModel
@@ -71,15 +72,23 @@ implements PropertyUiModel {
         return propertyMemento.getProperty(this::getSpecificationLoader);
     }
 
+    // not strictly required, used for caching
     private transient ManagedProperty managedProperty;
 
     public ManagedProperty getManagedProperty() {
+        val owner = getParentUiModel().getObject();
         if(managedProperty==null) {
-            val owner = getParentUiModel().getObject();
-            val where = this.getRenderingHint().asWhere();
-            managedProperty = ManagedProperty.of(owner, getMetaModel(), where);
+            return managedProperty = createManagedProperty(owner);
         }
-        return managedProperty;
+        return managedProperty.getOwner()!=owner
+            //XXX ISIS-2830 recreate if owner had changed
+            ? managedProperty = createManagedProperty(owner)
+            : managedProperty;
+    }
+
+    private ManagedProperty createManagedProperty(final @NonNull ManagedObject owner) {
+        val where = this.getRenderingHint().asWhere();
+        return ManagedProperty.of(owner, getMetaModel(), where);
     }
 
     @Override