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