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
         } 

Reply via email to