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/04/15 13:59:46 UTC

[isis] branch master updated: ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (7)

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 d3eda46  ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (7)
d3eda46 is described below

commit d3eda465bdb022d8470025931a73ee9fe7276001
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 15 15:59:32 2021 +0200

    ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (7)
    
    ... when outside the scope of initial spec loading (its optimized for
    initial loading, skips introspecting members)
---
 .../object/choices/ChoicesFacetFromBoundedAbstract.java |  2 +-
 ...tableObjectFacetDeclarativeInitializingAbstract.java | 10 +++++-----
 .../ActionParameterAutoCompleteFacetViaMethod.java      |  2 +-
 .../choices/method/ActionChoicesFacetViaMethod.java     |  2 +-
 .../choices/method/PropertyChoicesFacetViaMethod.java   |  2 +-
 .../core/metamodel/objectmanager/ObjectManager.java     | 17 +++++++++--------
 6 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
index 3590fed..c7bcade 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
@@ -112,7 +112,7 @@ implements
         val resulType = getObjectSpecification().getCorrespondingClass();
         val query = Query.allInstances(resulType);
         
-        val resultTypeSpec = getObjectManager().loadSpecification(resulType);
+        val resultTypeSpec = specForType(resulType).orElse(null);
         val queryRequest = ObjectBulkLoader.Request.of(resultTypeSpec, query);
         val allMatching = getObjectManager().queryObjects(queryRequest)
                 .filter(ManagedObjects.VisibilityUtil.filterOn(interactionInitiatedBy));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
index 7b85d10..3e9cb08 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
@@ -61,8 +61,8 @@ extends RecreatableObjectFacetAbstract {
         }
 
         val objectManager = super.getObjectManager();
-        val spec = objectManager.loadSpecification(viewModelPojo);
-        val viewModelAdapter = ManagedObject.of(spec, viewModelPojo); 
+        val viewModelAdapter = objectManager.adapt(viewModelPojo);
+        val spec = viewModelAdapter.getSpecification();
 
         super.getServiceInjector().injectServicesInto(viewModelPojo);
         
@@ -88,7 +88,6 @@ extends RecreatableObjectFacetAbstract {
         final _Mementos.Memento memento = newMemento();
 
         val objectManager = super.getObjectManager();
-        val spec = objectManager.loadSpecification(viewModelPojo);
         
         /*
          * ManagedObject that holds the ObjectSpecification used for 
@@ -97,7 +96,8 @@ extends RecreatableObjectFacetAbstract {
          * Does _not_ perform dependency injection on the domain object. Also bypasses 
          * caching (if any), that is each call to this method creates a new instance.
          */
-        val ownerAdapter = ManagedObject.of(spec, viewModelPojo);
+        val viewModelAdapter = objectManager.adapt(viewModelPojo);
+        val spec = viewModelAdapter.getSpecification();
 
         final Stream<OneToOneAssociation> properties = spec.streamProperties(MixedIn.EXCLUDED);
 
@@ -108,7 +108,7 @@ extends RecreatableObjectFacetAbstract {
         .filter(property->!property.isNotPersisted())
         .forEach(property->{
             final ManagedObject propertyValue = 
-                    property.get(ownerAdapter, InteractionInitiatedBy.FRAMEWORK);
+                    property.get(viewModelAdapter, InteractionInitiatedBy.FRAMEWORK);
             if(propertyValue != null && propertyValue.getPojo()!=null) {
                 memento.put(property.getId(), propertyValue.getPojo());
             }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index 8dbcf9c..182d13c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -94,7 +94,7 @@ implements ImperativeFacet {
         if (collectionOrArray == null) {
             return Can.empty();
         }
-        val elementSpec = getObjectManager().loadSpecification(choicesType);
+        val elementSpec = specForTypeElseFail(choicesType);
         val visibleChoices = ManagedObjects
                 .adaptMultipleOfTypeThenAttachThenFilterByVisibility(elementSpec, collectionOrArray, interactionInitiatedBy);
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index 80ffeaa..e5008c7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -93,7 +93,7 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
             final Class<?> parameterType,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        val elementSpec = getObjectManager().loadSpecification(parameterType);
+        val elementSpec = specForTypeElseFail(parameterType);
         val visibleChoices = ManagedObjects
                 .adaptMultipleOfTypeThenAttachThenFilterByVisibility(
                         elementSpec, collectionOrArray, interactionInitiatedBy);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index e601dab..0aa353a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -69,7 +69,7 @@ public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract
             final ManagedObject owningAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        val elementSpec = getObjectManager().loadSpecification(((FacetedMethod) getFacetHolder()).getType());
+        val elementSpec = specForTypeElseFail(((FacetedMethod) getFacetHolder()).getType());
         val optionPojos = ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
 
 //XXX[ISIS-2383] debugging        
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
index 36e544d..deea36b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.metamodel.objectmanager;
 
+import java.util.Optional;
+
 import javax.annotation.Nullable;
 
 import org.apache.isis.commons.collections.Can;
@@ -95,24 +97,23 @@ public interface ObjectManager {
     }
     
     @Nullable
-    public default ObjectSpecification loadSpecification(@Nullable Object pojo) {
+    public default Optional<ObjectSpecification> specForPojo(final @Nullable Object pojo) {
         if(pojo==null) {
-            return null; 
+            return Optional.empty(); 
         }
-        return loadSpecification(pojo.getClass());
+        return specForType(pojo.getClass());
     }
     
-    @Nullable
-    default ObjectSpecification loadSpecification(@Nullable final Class<?> domainType) {
-        return getMetaModelContext().getSpecificationLoader().loadSpecification(domainType);
+    default Optional<ObjectSpecification> specForType(final @Nullable Class<?> domainType) {
+        return getMetaModelContext().getSpecificationLoader().specForType(domainType);
     }
     
-    public default ManagedObject adapt(@Nullable Object pojo) {
+    public default ManagedObject adapt(final @Nullable Object pojo) {
         if(pojo==null) {
             return ManagedObject.unspecified(); 
         }
         // could be any pojo, even of a type, that is vetoed for introspection (spec==null)
-        val spec = loadSpecification(pojo.getClass());
+        val spec = specForType(pojo.getClass()).orElse(null);
         if(spec==null) {
             return ManagedObject.unspecified();
         }