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 a35521c3a224f81f84f7143de2bfa74c12f406c7 Author: danhaywood <d...@haywood-associates.co.uk> AuthorDate: Tue Dec 3 11:22:03 2019 +0000 ISIS-2196: removes duplication by introducing MethodUtil.isPublic(...) --- .../apache/isis/metamodel/commons/MethodUtil.java | 18 ++++-- .../isis/metamodel/facets/MethodFinderUtils.java | 72 ++++++---------------- .../metamodel/facets/jaxb/JaxbFacetFactory.java | 6 +- .../SupportingMethodValidatorRefinerFactory.java | 4 +- 4 files changed, 36 insertions(+), 64 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java index 7535b73..a5908c9 100644 --- a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java +++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java @@ -21,6 +21,7 @@ package org.apache.isis.metamodel.commons; import lombok.val; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Collection; @@ -82,10 +83,7 @@ public class MethodUtil { final Class<?> returnType, final Class<?>[] paramTypes) { - final int modifiers = method.getModifiers(); - - // check for public modifier - if (!Modifier.isPublic(modifiers)) { + if (!isPublic(method)) { return false; } @@ -188,9 +186,17 @@ public class MethodUtil { } + public static boolean isNotStatic(final Method method) { + return !isStatic(method); + } + public static boolean isStatic(final Method method) { final int modifiers = method.getModifiers(); - final boolean isStatic = Modifier.isStatic(modifiers); - return isStatic; + return Modifier.isStatic(modifiers); + } + + public static boolean isPublic(Member method) { + final int modifiers = method.getModifiers(); + return Modifier.isPublic(modifiers); } } diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodFinderUtils.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodFinderUtils.java index 440ced1..3179f85 100644 --- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodFinderUtils.java +++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodFinderUtils.java @@ -20,11 +20,10 @@ package org.apache.isis.metamodel.facets; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional;import org.apache.isis.applib.services.i18n.TranslatableString; +import java.util.*; +import java.util.stream.Collectors; + +import org.apache.isis.applib.services.i18n.TranslatableString; import org.apache.isis.commons.internal.reflection._MethodCache; import org.apache.isis.metamodel.commons.MethodUtil; import org.apache.isis.metamodel.facetapi.MethodRemover; @@ -36,14 +35,6 @@ public final class MethodFinderUtils { private MethodFinderUtils() { } - public static Method findMethodWithOrWithoutParameters(final Class<?> type, final String name, final Class<?> returnType, final Class<?>[] paramTypes) { - Method method = MethodFinderUtils.findMethod(type, name, returnType, paramTypes); - if (method == null) { - method = MethodFinderUtils.findMethod(type, name, returnType, MethodPrefixBasedFacetFactoryAbstract.NO_PARAMETERS_TYPES); - } - return method; - } - /** * Returns a specific public methods that: have the specified prefix; have * the specified return type (or some subtype), and has the @@ -69,9 +60,7 @@ public final class MethodFinderUtils { return null; } - final int modifiers = method.getModifiers(); - - if (!Modifier.isPublic(modifiers)) { + if (!MethodUtil.isPublic(method)) { return null; } @@ -102,7 +91,8 @@ public final class MethodFinderUtils { return method; } - + + public static Method findMethod_returningAnyOf( final Class<?>[] returnTypes, final Class<?> type, @@ -121,56 +111,32 @@ public final class MethodFinderUtils { public static Method findMethod(final Class<?> type, final String name, final Class<?> returnType) { try { final Method[] methods = type.getMethods(); - for (final Method method2 : methods) { - final Method method = method2; - final int modifiers = method.getModifiers(); - // check for public modifier - if (!Modifier.isPublic(modifiers)) { - continue; - } - - if(MethodUtil.isStatic(method)) { - continue; - } + return Arrays.stream(methods) + .filter(MethodUtil::isPublic) + .filter(MethodUtil::isNotStatic) + .filter(method -> method.getName().equals(name)) + .filter(method -> returnType == null || + returnType == method.getReturnType()) + .findFirst() + .orElse(null); - // check for name - if (!method.getName().equals(name)) { - continue; - } - - // check for return type - if (returnType != null && returnType != method.getReturnType()) { - continue; - } - return method; - } } catch (final SecurityException e) { return null; } - return null; } public static List<Method> findMethodsWithAnnotation(final Class<?> type, final Class<? extends Annotation> annotationClass) { - final List<Method> methods = new ArrayList<Method>(); - // Validate arguments if (type == null || annotationClass == null) { throw new IllegalArgumentException("One or more arguments are 'null' valued"); } // Find methods annotated with the specified annotation - for (final Method method : type.getMethods()) { - if(MethodUtil.isStatic(method)) { - continue; - } - - if (method.isAnnotationPresent(annotationClass)) { - methods.add(method); - } - } - - return methods; + return Arrays.stream(type.getMethods()) + .filter(method -> !MethodUtil.isStatic(method)) + .filter(method -> method.isAnnotationPresent(annotationClass)) + .collect(Collectors.toList()); } public static void removeMethod(final MethodRemover methodRemover, final Method method) { diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java index 77d59eb..7c5997e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java @@ -32,6 +32,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.isis.commons.internal.collections._Lists; import org.apache.isis.config.IsisConfiguration; +import org.apache.isis.metamodel.commons.MethodUtil; import org.apache.isis.metamodel.facetapi.FacetHolder; import org.apache.isis.metamodel.facetapi.FeatureType; import org.apache.isis.metamodel.facetapi.MetaModelRefiner; @@ -378,9 +379,8 @@ implements MetaModelRefiner { final Constructor<?>[] constructors = correspondingClass.getDeclaredConstructors(); for (Constructor<?> constructor : constructors) { if(constructor.getParameterCount() == 0) { - if (!Modifier.isPublic(constructor.getModifiers())) { - validator - .onFailure( + if (!MethodUtil.isPublic(constructor)) { + validator.onFailure( objectSpec, objectSpec.getIdentifier(), "JAXB view model '%s' has a no-arg constructor, however it is not public", diff --git a/extensions/other/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java b/extensions/other/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java index 5a7d55a..c26a47f 100644 --- a/extensions/other/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java +++ b/extensions/other/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java @@ -28,6 +28,7 @@ import java.util.stream.Collectors; import org.apache.isis.applib.annotation.Model; import org.apache.isis.commons.internal.collections._Lists; import org.apache.isis.commons.internal.collections._Sets; +import org.apache.isis.metamodel.commons.MethodUtil; import org.apache.isis.metamodel.facetapi.FacetHolder; import org.apache.isis.metamodel.facetapi.MetaModelRefiner; import org.apache.isis.metamodel.facets.FacetFactoryAbstract; @@ -114,8 +115,7 @@ implements MetaModelRefiner { //val type = spec.getCorrespondingClass(); val unmetContraints = _Lists.<String>newArrayList(); - final int modifiers = method.getModifiers(); - if (!Modifier.isPublic(modifiers)) { + if (!MethodUtil.isPublic(method)) { unmetContraints.add("method must be 'public'"); return unmetContraints; // don't check any further }