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.