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

commit 770423b358e7c81d803ca784adbd7460f00e8d4c
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Thu Apr 12 10:09:02 2018 +0200

    ISIS-1932 Internal API: introduces _Arrays for common Array idioms.
---
 .../isis/applib/internal/collections/_Arrays.java  | 74 ++++++++++++++++++++++
 .../applib/internal/collections/_Collections.java  | 22 +++++++
 .../isis/core/metamodel/facets/FacetedMethod.java  |  9 +--
 ...rCollectionIdentifyingFacetFactoryAbstract.java | 10 +--
 .../facets/actcoll/typeof/TypeOfFacet.java         | 12 ++--
 .../action/ActionAnnotationFacetFactory.java       |  8 +--
 .../CollectionAnnotationFacetFactory.java          |  4 +-
 .../javautilcollection/CollectionFacetFactory.java |  7 +-
 .../core/metamodel/specloader/CollectionUtils.java | 33 ++--------
 9 files changed, 127 insertions(+), 52 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Arrays.java
 
b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Arrays.java
new file mode 100644
index 0000000..8009627
--- /dev/null
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Arrays.java
@@ -0,0 +1,74 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.internal.collections;
+
+import javax.annotation.Nullable;
+
+/**
+ * <h1>- internal use only -</h1>
+ * <p>
+ * Common Array idioms.
+ * </p>
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this 
package! <br/> 
+ * These may be changed or removed without notice!
+ * </p>
+ * 
+ * @since 2.0.0
+ */
+public class _Arrays {
+       
+    // -- PREDICATES
+
+       /**
+        * @param cls
+        * @return whether {@code cls} represents an array
+        */
+    public static boolean isArrayType(@Nullable final Class<?> cls) {
+        return cls!=null ? cls.isArray() : false;
+    }
+    
+    /**
+     * For convenience also provided in {@link _Collections}.
+     * @param cls
+     * @return whether {@code cls} implements the java.util.Collection 
interface 
+     * or represents an array
+     */
+    public static boolean isCollectionOrArrayType(final Class<?> cls) {
+        return _Collections.isCollectionType(cls) || _Arrays.isArrayType(cls);
+    }
+       
+    // -- ELEMENT TYPE INFERENCE
+    
+    /**
+     * Returns the inferred element type of the specified array type 
+     * @param type of the array for which to infer the element type 
+     * @return inferred type or null if inference fails
+     */
+    public static @Nullable Class<?> inferElementTypeIfAny(@Nullable final 
Class<?> arrayType) {
+        if(!isArrayType(arrayType)) {
+            return null;
+        }
+        return arrayType.getComponentType();
+    }
+    
+       // --
+       
+}
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections.java
 
b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections.java
index 96c59e6..80aef7e 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections.java
@@ -48,6 +48,26 @@ import javax.annotation.Nullable;
  * @since 2.0.0
  */
 public class _Collections {
+       
+    // -- PREDICATES
+
+       /**
+        * @param cls
+        * @return whether {@code cls} implements the java.util.Collection 
interface
+        */
+    public static boolean isCollectionType(@Nullable final Class<?> cls) {
+        return cls!=null ? java.util.Collection.class.isAssignableFrom(cls) : 
false;
+    }
+    
+    /**
+     * For convenience also provided in {@link _Arrays}.
+     * @param cls
+     * @return whether {@code cls} implements the java.util.Collection 
interface 
+     * or represents an array
+     */
+    public static boolean isCollectionOrArrayType(final Class<?> cls) {
+        return _Collections.isCollectionType(cls) || _Arrays.isArrayType(cls);
+    }
 
        // -- COLLECTION UNMODIFIABLE ADAPTERS (FOR LIST)
 
@@ -187,6 +207,8 @@ public class _Collections {
                                                
typeOfCollection.getClass().getName()));
        }
        
+       // -- ELEMENT TYPE INFERENCE
+       
        // --
        
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
index 7c4b64e..bb8fefe 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
@@ -24,9 +24,8 @@ import java.lang.reflect.Type;
 import java.util.Collections;
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.internal.collections._Arrays;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -34,7 +33,9 @@ import 
org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import 
org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
 import 
org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacetDefault;
-import org.apache.isis.core.metamodel.specloader.*;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+
+import com.google.common.collect.Lists;
 
 /**
  * non-final only so it can be mocked if need be.
@@ -137,7 +138,7 @@ public class FacetedMethod extends TypedHolderDefault 
implements IdentifiedHolde
                         specificationLoader);
 
                 if(typeOfFacet == null ) {
-                    if 
(org.apache.isis.core.metamodel.specloader.CollectionUtils.isArrayType(parameterType))
 {
+                    if (_Arrays.isArrayType(parameterType)) {
                         typeOfFacet = TypeOfFacet.Util.inferFromArrayType(fmp, 
parameterType, specificationLoader);
                     }
                 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
index 6719694..197e407 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
@@ -21,8 +21,8 @@ package org.apache.isis.core.metamodel.facets;
 
 import java.util.List;
 
+import org.apache.isis.applib.internal.collections._Collections;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 
 public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract
         extends MethodPrefixBasedFacetFactoryAbstract
@@ -33,14 +33,8 @@ public abstract class 
PropertyOrCollectionIdentifyingFacetFactoryAbstract
         super(featureTypes, OrphanValidation.DONT_VALIDATE, prefixes);
     }
 
-
-    // //////////////////////////////////////
-
     protected boolean isCollectionOrArray(final Class<?> cls) {
-        return CollectionUtils.isCollectionType(cls) || 
CollectionUtils.isArrayType(cls);
+        return _Collections.isCollectionOrArrayType(cls);
     }
 
-
-
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacet.java
index 8e79f74..bf18c01 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacet.java
@@ -26,6 +26,8 @@ import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Arrays;
+import org.apache.isis.applib.internal.collections._Collections;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacet;
 import org.apache.isis.core.metamodel.specloader.CollectionUtils;
@@ -52,7 +54,7 @@ public interface TypeOfFacet extends SingleClassValueFacet {
                 final SpecificationLoader specificationLoader) {
 
             final Class<?> methodReturnType = method.getReturnType();
-            if (!CollectionUtils.isCollectionType(methodReturnType)) {
+            if (!_Collections.isCollectionType(methodReturnType)) {
                 return null;
             }
 
@@ -106,9 +108,9 @@ public interface TypeOfFacet extends SingleClassValueFacet {
                 final FacetHolder holder,
                 final Class<?> type,
                 final SpecificationLoader specificationLoader) {
-            final Class<?> componentType = 
CollectionUtils.inferElementTypeFromArrayType(type);
-            return componentType != null
-                    ? new TypeOfFacetInferredFromArray(componentType, holder, 
specificationLoader)
+            final Class<?> elementType = _Arrays.inferElementTypeIfAny(type);
+            return elementType != null
+                    ? new TypeOfFacetInferredFromArray(elementType, holder, 
specificationLoader)
                     : null;
         }
 
@@ -119,7 +121,7 @@ public interface TypeOfFacet extends SingleClassValueFacet {
                 final Type genericParameterType,
                 final SpecificationLoader specificationLoader) {
                
-               if(!CollectionUtils.isCollectionType(parameterType)) {
+               if(!_Collections.isCollectionType(parameterType)) {
                 return null;
             }
                
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 053eaf8..16c317c 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -22,9 +22,8 @@ package org.apache.isis.core.metamodel.facets.actions.action;
 import java.lang.reflect.Method;
 import java.util.List;
 
-import com.google.common.base.Strings;
-
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.internal.collections._Collections;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -57,9 +56,10 @@ import 
org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFa
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import 
org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 import org.apache.isis.core.metamodel.util.EventUtil;
 
+import com.google.common.base.Strings;
+
 public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
 
 
@@ -255,7 +255,7 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract {
         final FacetedMethod holder = processMethodContext.getFacetHolder();
 
         final Class<?> methodReturnType = method.getReturnType();
-        if (!CollectionUtils.isCollectionType(methodReturnType) && 
!CollectionUtils.isArrayType(methodReturnType)) {
+        if (!_Collections.isCollectionOrArrayType(methodReturnType)) {
             return;
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index a182b77..4e94b4b 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -26,6 +26,7 @@ import java.lang.reflect.TypeVariable;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.internal.collections._Collections;
 import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -55,7 +56,6 @@ import 
org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemove
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import 
org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 import org.apache.isis.core.metamodel.util.EventUtil;
 
 public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract {
@@ -196,7 +196,7 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract {
         final Method method = processMethodContext.getMethod();
 
         final Class<?> methodReturnType = method.getReturnType();
-        if (!CollectionUtils.isCollectionType(methodReturnType) && 
!CollectionUtils.isArrayType(methodReturnType)) {
+        if (!_Collections.isCollectionOrArrayType(methodReturnType)) {
             return;
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
index 39e7619..132c6ae 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.collections.javautilcollection;
 
+import org.apache.isis.applib.internal.collections._Arrays;
+import org.apache.isis.applib.internal.collections._Collections;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -29,7 +31,6 @@ import 
org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredF
 import 
org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import 
org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
-import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 
 public class CollectionFacetFactory extends FacetFactoryAbstract {
 
@@ -40,9 +41,9 @@ public class CollectionFacetFactory extends 
FacetFactoryAbstract {
     @Override
     public void process(final ProcessClassContext processClassContaxt) {
 
-        if (CollectionUtils.isCollectionType(processClassContaxt.getCls())) {
+        if (_Collections.isCollectionType(processClassContaxt.getCls())) {
             processCollectionType(processClassContaxt);
-        } else if (CollectionUtils.isArrayType(processClassContaxt.getCls())) {
+        } else if (_Arrays.isArrayType(processClassContaxt.getCls())) {
             processAsArrayType(processClassContaxt);
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
index 80a35a0..b0ea59f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
@@ -26,6 +26,9 @@ import java.util.function.Consumer;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.applib.internal.collections._Arrays;
+import org.apache.isis.applib.internal.collections._Collections;
+
 /**
  * Defines the types which are considered to be collections.
  * 
@@ -38,16 +41,6 @@ import javax.annotation.Nullable;
 public final class CollectionUtils {
 
     private CollectionUtils() {}
-
-    // -- PREDICATES
-    
-    public static boolean isCollectionType(@Nullable final Class<?> cls) {
-        return cls!=null ? java.util.Collection.class.isAssignableFrom(cls) : 
false;
-    }
-
-    public static boolean isArrayType(@Nullable final Class<?> cls) {
-        return cls!=null ? cls.isArray() : false;
-    }
     
     /**
      * 
@@ -58,28 +51,16 @@ public final class CollectionUtils {
     public static boolean isParamCollection(
                @Nullable final Class<?> parameterType,
                @Nullable final Type genericParameterType) {
-       if(inferElementTypeFromArrayType(parameterType) != null) {
+       if(_Arrays.inferElementTypeIfAny(parameterType) != null) {
                return true;
        }
-       if(isCollectionType(parameterType) && 
inferElementTypeFromGenericType(genericParameterType)!=null) {
+       if(_Collections.isCollectionType(parameterType) && 
inferElementTypeFromGenericType(genericParameterType)!=null) {
                return true;
        }
        return false;
     }
 
-    // -- ELEMENT TYPE INFERENCE (ARRAY)
-    
-    /**
-     * Returns the inferred element type of the specified array type 
-     * @param type of the array for which to infer the element type 
-     * @return inferred type or null if inference fails
-     */
-    public static @Nullable Class<?> inferElementTypeFromArrayType(@Nullable 
final Class<?> type) {
-        if(!isArrayType(type)) {
-            return null;
-        }
-        return type.getComponentType();
-    }
+
 
     // -- ELEMENT TYPE INFERENCE (FROM GENERIC TYPE)
     
@@ -122,7 +103,7 @@ public final class CollectionUtils {
                
                final Class<?> fieldType = field.getType();
                
-               if(isCollectionType(fieldType)) {
+               if(_Collections.isCollectionType(fieldType)) {
                        
                        final Class<?> elementType = 
inferElementTypeFromGenericType(field.getGenericType());
                        

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.

Reply via email to