You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/12/03 12:28:44 UTC

[isis] 03/07: ISIS-2195: adds further short-circuit when loading actions

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e8d374d04fd2cb64a142a2a6ff5ebbf6e73fa530
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Dec 3 10:20:32 2019 +0000

    ISIS-2195: adds further short-circuit when loading actions
    
    ... either load the specifications for all of the action parameter types, or none.
---
 .../metamodel/specloader/SpecificationLoader.java   | 14 ++++++++++----
 .../specloader/SpecificationLoaderDefault.java      | 15 +++++++++++++++
 .../specloader/specimpl/FacetedMethodsBuilder.java  | 21 +--------------------
 3 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
index 12b3c04..55d12cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
@@ -94,15 +94,21 @@ public interface SpecificationLoader {
      *
      * <p>
      * It is possible for this method to return <tt>null</tt>, for example if
-     * the configured {@link ClassSubstitutor}
-     * has filtered out the class.
+     * the configured {@link ClassSubstitutor} has filtered out the class.
      * 
-     * @return {@code null} if {@code domainType==null}
+     * @return {@code null} if {@code domainType==null}, or if the type should be ignored.
      */
     ObjectSpecification loadSpecification(@Nullable Class<?> domainType, IntrospectionState upTo);
-    
+
+    /**
+     * @param domainTypes
+     * @return true if a specification could be loaded for all types, false otherwise
+     */
+    boolean loadSpecifications(final Class<?>... domainTypes);
+
     Class<?> lookupType(ObjectSpecId objectSpecId);
 
+
     // -- SHORTCUTS
 
     default ObjectSpecification loadSpecification(@Nullable final Class<?> domainType) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index d27e63a..a0e53d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -18,7 +18,9 @@
  */
 package org.apache.isis.metamodel.specloader;
 
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Objects;
 import java.util.function.Consumer;
 
 import javax.annotation.Nullable;
@@ -272,6 +274,18 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         loadSpecification(domainType, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
     }
 
+    @Override
+    public boolean loadSpecifications(Class<?>... domainTypes) {
+        // ensure that all types are loadable
+        if (Arrays.stream(domainTypes)
+                .map(domainType -> classSubstitutor.getClass(domainType))
+                .anyMatch(Objects::isNull)) {
+            return false;
+        }
+        Arrays.stream(domainTypes).forEach(this::loadSpecification);
+        return true;
+    }
+
     @Override @Nullable
     public ObjectSpecification loadSpecification(@Nullable final Class<?> type, final IntrospectionState upTo) {
 
@@ -333,6 +347,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         return cache.resolveType(objectSpecId);
     }
 
+
     // -- HELPER
     
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 7d7ea38..d35f94e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -45,7 +45,6 @@ import org.apache.isis.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.metamodel.facets.object.facets.FacetsFacet;
 import org.apache.isis.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.metamodel.methodutils.MethodScope;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.metamodel.services.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.metamodel.specloader.facetprocessor.FacetProcessor;
@@ -187,12 +186,6 @@ public class FacetedMethodsBuilder {
     // ////////////////////////////////////////////////////////////////////////////
 
 
-    public void introspectObjectSpecId() {
-        if (log.isDebugEnabled()) {
-            log.debug("introspecting {}: objectSpecId", getClassName());
-        }
-        getFacetProcessor().processObjectSpecId(introspectedClass, inspectedTypeSpec);
-    }
     public void introspectClass() {
         if (log.isDebugEnabled()) {
             log.debug("introspecting {}: class-level details", getClassName());
@@ -514,19 +507,7 @@ public class FacetedMethodsBuilder {
     }
 
     private boolean loadParamSpecs(final Method actionMethod) {
-        final Class<?>[] parameterTypes = actionMethod.getParameterTypes();
-        return loadParamSpecs(parameterTypes);
-    }
-
-    private boolean loadParamSpecs(final Class<?>[] parameterTypes) {
-        final int numParameters = parameterTypes.length;
-        for (int j = 0; j < numParameters; j++) {
-            final ObjectSpecification paramSpec = getSpecificationLoader().loadSpecification(parameterTypes[j]);
-            if (paramSpec == null) {
-                return false;
-            }
-        }
-        return true;
+        return getSpecificationLoader().loadSpecifications(actionMethod.getParameterTypes());
     }