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());
}