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 b86957db4cc00332580a6a5e889f0513f8830483
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Thu Apr 30 09:17:48 2020 +0200

    ISIS-2340: prepare for new pending param model
---
 .../isis/core/metamodel/commons/MethodUtil.java    |   4 +
 .../isis/core/metamodel/facets/FacetFactory.java   |   4 +-
 .../core/metamodel/facets/MethodFinderUtils.java   |  22 +++-
 .../facets/OrphanedSupportingMethodValidator.java  |   2 +-
 ...ependentArgUtils.java => ParameterSupport.java} |  22 ++--
 ...tionAddToRemoveFromAndValidateFacetFactory.java |   4 +-
 ...ParameterAutoCompleteFacetViaMethodFactory.java |   8 +-
 ...ctionParameterChoicesFacetViaMethodFactory.java |   8 +-
 ...tionParameterDefaultsFacetViaMethodFactory.java | 101 ++++++----------
 ...tionParameterDisabledFacetViaMethodFactory.java |   8 +-
 ...ActionParameterHiddenFacetViaMethodFactory.java |   8 +-
 .../model/good/ProperParameterSupport.java         | 131 +++++++++++++++++++++
 .../restfulobjects/viewer/mappers/FailureUtil.java |   8 +-
 .../viewer/resources/DomainResourceHelper.java     |   2 +-
 14 files changed, 224 insertions(+), 108 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
index 2467b40..3927f71 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
@@ -71,6 +71,10 @@ public class MethodUtil {
     @UtilityClass
     public static class Predicates {
         
+        public static Predicate<Method> paramCount(int n) {
+            return method -> method.getParameterCount() == n;
+        }
+        
         /**
          * @param methodName
          * @param returnType
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
index 339516d..a4c4c1d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
@@ -256,10 +256,10 @@ public interface FacetFactory {
                     optional
                         : supplier.get();
         }
-
         
     }
-
+    
+    
     /**
      * Process the method, and return the correctly setup annotation if 
present.
      */
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
index a52c1cd..1ecadfc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.core.commons.internal.reflection._MethodCache;
@@ -112,7 +113,19 @@ public final class MethodFinderUtils {
         return null;
     }
     
-    public static Method findMethod(final Class<?> type, final String name, 
final Class<?> returnType) {
+    public static Optional<Method> findNoArgMethod(final Class<?> type, final 
String name, final Class<?> returnType) {
+        return streamMethods(type, name, returnType)
+                .filter(MethodUtil.Predicates.paramCount(0))
+                .findFirst();
+    }
+    
+    public static Optional<Method> findSingleArgMethod(final Class<?> type, 
final String name, final Class<?> returnType) {
+        return streamMethods(type, name, returnType)
+                .filter(MethodUtil.Predicates.paramCount(1))
+                .findFirst();
+    }
+    
+    public static Stream<Method> streamMethods(final Class<?> type, final 
String name, final Class<?> returnType) {
         try {
             final Method[] methods = type.getMethods();
             return Arrays.stream(methods)
@@ -120,10 +133,8 @@ public final class MethodFinderUtils {
                     .filter(MethodUtil::isNotStatic)
                     .filter(method -> method.getName().equals(name))
                     .filter(method -> returnType == null ||
-                                      returnType == method.getReturnType())
-                    .findFirst()
-                    .orElse(null);
-
+                                      
returnType.isAssignableFrom(method.getReturnType()))
+                    ;
         } catch (final SecurityException e) {
             return null;
         }
@@ -233,4 +244,5 @@ public final class MethodFinderUtils {
         return findMethod_returningAnyOf(nonScalarTypes, type, name, 
paramTypes);
     }
 
+
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
index 4e301e3..a868290 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java
@@ -84,7 +84,7 @@ implements MetaModelRefiner {
             val notRecognizedMethods =
                     _Sets.minus(potentialOrphans, recognizedMethods);
 
-            // find reasons about why these are not recognized    
+            // find reasons why these are not recognized    
             notRecognizedMethods.forEach(notRecognizedMethod->{
                 
                 val unmetContraints = unmetContraints(spec, 
notRecognizedMethod);
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
similarity index 89%
rename from 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
index fdbebb3..75f5677 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
@@ -42,8 +42,9 @@ import lombok.extern.log4j.Log4j2;
  * @since 2.0
  *
  */
-@UtilityClass @Log4j2
-public class DependentArgUtils {
+@UtilityClass 
+@Log4j2
+public class ParameterSupport {
     
     @Value @Builder
     public static class ParamSupportingMethodSearchRequest {
@@ -51,7 +52,8 @@ public class DependentArgUtils {
         public static enum ReturnType {
             NON_SCALAR,
             TEXT,
-            BOOLEAN
+            BOOLEAN, 
+            SAME_AS_PARAMETER_TYPE,
         }
         
         @NonNull FacetFactory.ProcessMethodContext processMethodContext;
@@ -72,8 +74,8 @@ public class DependentArgUtils {
     }
 
     public static void findParamSupportingMethods(
-            final DependentArgUtils.ParamSupportingMethodSearchRequest 
searchRequest, 
-            final 
Consumer<DependentArgUtils.ParamSupportingMethodSearchResult> onMethodFound) {
+            final ParameterSupport.ParamSupportingMethodSearchRequest 
searchRequest, 
+            final Consumer<ParameterSupport.ParamSupportingMethodSearchResult> 
onMethodFound) {
         
         val actionMethod = searchRequest.getProcessMethodContext().getMethod();
         val paramCount = actionMethod.getParameterCount();
@@ -99,8 +101,8 @@ public class DependentArgUtils {
     /*
      * search successively for the supporting method, trimming number of param 
types each loop
      */
-    private static DependentArgUtils.ParamSupportingMethodSearchResult 
findParamSupportingMethod(
-            final DependentArgUtils.ParamSupportingMethodSearchRequest 
searchRequest,
+    private static ParameterSupport.ParamSupportingMethodSearchResult 
findParamSupportingMethod(
+            final ParameterSupport.ParamSupportingMethodSearchRequest 
searchRequest,
             final int paramIndex) {
 
         val processMethodContext = searchRequest.getProcessMethodContext();
@@ -131,6 +133,10 @@ public class DependentArgUtils {
                 supportingMethod = MethodFinderUtils
                     .findMethod_returningNonScalar(type, methodName, 
paramType, paramTypesToLookFor);
                 break;
+            case SAME_AS_PARAMETER_TYPE:
+                supportingMethod = MethodFinderUtils
+                    .findMethod(type, methodName, paramType, 
paramTypesToLookFor);
+                break;
             default:
                 supportingMethod = null;
             }
@@ -177,7 +183,7 @@ public class DependentArgUtils {
     }
     
     private String toString(
-            DependentArgUtils.ParamSupportingMethodSearchRequest 
searchRequest, 
+            ParameterSupport.ParamSupportingMethodSearchRequest searchRequest, 
             int paramIndex) {
         
         return String.format("%s.%s(%s) : %s",
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
index c80ddbe..16ebd16 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
@@ -63,11 +63,11 @@ public class 
CollectionAddToRemoveFromAndValidateFacetFactory extends MethodPref
         final Class<?> cls = processMethodContext.getCls();
 
         // add
-        final Method addToMethod = MethodFinderUtils.findMethod(cls, 
MethodLiteralConstants.ADD_TO_PREFIX + capitalizedName, void.class);
+        final Method addToMethod = MethodFinderUtils.findSingleArgMethod(cls, 
MethodLiteralConstants.ADD_TO_PREFIX + capitalizedName, 
void.class).orElse(null);
         processMethodContext.removeMethod(addToMethod);
 
         // remove
-        final Method removeFromMethod = MethodFinderUtils.findMethod(cls, 
MethodLiteralConstants.REMOVE_FROM_PREFIX + capitalizedName, void.class);
+        final Method removeFromMethod = 
MethodFinderUtils.findSingleArgMethod(cls, 
MethodLiteralConstants.REMOVE_FROM_PREFIX + capitalizedName, 
void.class).orElse(null);
         processMethodContext.removeMethod(removeFromMethod);
 
         // add facets
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
index a4f0a72..3c0a0ce 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
@@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.DependentArgUtils;
-import 
org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType;
+import org.apache.isis.core.metamodel.facets.ParameterSupport;
+import 
org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import 
org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import 
org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
@@ -54,7 +54,7 @@ public class ActionParameterAutoCompleteFacetViaMethodFactory 
extends MethodPref
         val actionMethod = processMethodContext.getMethod();
         val capitalizedName = 
StringExtensions.asCapitalizedName(actionMethod.getName());
 
-        val searchRequest = 
DependentArgUtils.ParamSupportingMethodSearchRequest.builder()
+        val searchRequest = 
ParameterSupport.ParamSupportingMethodSearchRequest.builder()
                 .processMethodContext(processMethodContext)
                 .returnType(ReturnType.NON_SCALAR)
                 .additionalParamType(String.class)
@@ -62,7 +62,7 @@ public class ActionParameterAutoCompleteFacetViaMethodFactory 
extends MethodPref
                     MethodLiteralConstants.AUTO_COMPLETE_PREFIX + paramIndex + 
capitalizedName)
                 .build();
 
-        DependentArgUtils.findParamSupportingMethods(searchRequest, 
searchResult -> {
+        ParameterSupport.findParamSupportingMethods(searchRequest, 
searchResult -> {
             
             val autoCompleteMethod = searchResult.getSupportingMethod();
             val paramIndex = searchResult.getParamIndex();
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
index 0be6006..ac2567b 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
@@ -24,8 +24,8 @@ import 
org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.DependentArgUtils;
-import 
org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType;
+import org.apache.isis.core.metamodel.facets.ParameterSupport;
+import 
org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import 
org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
@@ -64,14 +64,14 @@ extends MethodPrefixBasedFacetFactoryAbstract {
         val actionMethod = processMethodContext.getMethod();
         val capitalizedName = 
StringExtensions.asCapitalizedName(actionMethod.getName());
 
-        val searchRequest = 
DependentArgUtils.ParamSupportingMethodSearchRequest.builder()
+        val searchRequest = 
ParameterSupport.ParamSupportingMethodSearchRequest.builder()
                 .processMethodContext(processMethodContext)
                 .returnType(ReturnType.NON_SCALAR)
                 .paramIndexToMethodName(paramIndex -> 
                     MethodLiteralConstants.CHOICES_PREFIX + paramIndex + 
capitalizedName)
                 .build();
 
-        DependentArgUtils.findParamSupportingMethods(searchRequest, 
searchResult -> {
+        ParameterSupport.findParamSupportingMethods(searchRequest, 
searchResult -> {
             
             val choicesMethod = searchResult.getSupportingMethod();
             val paramIndex = searchResult.getParamIndex();
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java
index b57ede1..3228c8e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java
@@ -19,20 +19,15 @@
 
 package org.apache.isis.core.metamodel.facets.param.defaults.methodnum;
 
-import java.lang.reflect.Method;
-import java.util.List;
-
 import org.apache.isis.core.commons.collections.Can;
-import org.apache.isis.core.commons.internal.collections._Arrays;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import 
org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.ParameterSupport;
+import 
org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
 import 
org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
 
 import lombok.val;
@@ -58,77 +53,49 @@ public class ActionParameterDefaultsFacetViaMethodFactory 
extends MethodPrefixBa
 
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
-
-        final FacetedMethod facetedMethod = 
processMethodContext.getFacetHolder();
-        final List<FacetedMethodParameter> holderList = 
facetedMethod.getParameters();
-
-        
attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(processMethodContext, 
holderList);
-    }
-
-    private void 
attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(final 
ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> 
parameters) {
+    
+        val facetedMethod = processMethodContext.getFacetHolder();
+        val parameters = facetedMethod.getParameters();
 
         if (parameters.isEmpty()) {
             return;
         }
 
-        final Method actionMethod = processMethodContext.getMethod();
-        final int paramCount = actionMethod.getParameterCount();
-
-        for (int i = 0; i < paramCount; i++) {
-
-            // attempt to match method...
-            Method defaultMethod = findDefaultNumMethod(processMethodContext, 
i);
-            if (defaultMethod == null) {
-                continue;
-            }
-
-            processMethodContext.removeMethod(defaultMethod);
-
-            final FacetedMethod facetedMethod = 
processMethodContext.getFacetHolder();
-            if 
(facetedMethod.containsNonFallbackFacet(ActionDefaultsFacet.class)) {
-                final Class<?> cls2 = processMethodContext.getCls();
-                throw new MetaModelException(cls2 + " uses both old and new 
default syntax for " + actionMethod.getName() + "(...) - must use one or 
other");
-            }
-
-            // add facets directly to parameters, not to actions
-            final FacetedMethodParameter paramAsHolder = parameters.get(i);
-            super.addFacet(new 
ActionParameterDefaultsFacetViaMethod(defaultMethod, i, paramAsHolder));
-        }
-    }
-    
-    /**
-     * search successively for the default method, trimming number of param 
types each loop
-     */
-    private static Method findDefaultNumMethod(ProcessMethodContext 
processMethodContext, int n) {
+        // attach DefaultFacetForParameters if defaultNumMethod is found ...
         
-        val cls = processMethodContext.getCls();
+        //val translationService = 
getMetaModelContext().getTranslationService();
         val actionMethod = processMethodContext.getMethod();
-        Class<?>[] paramTypes = actionMethod.getParameterTypes();
-        val returnType = paramTypes[n];
-        val capitalizedName =
-                MethodLiteralConstants.DEFAULT_PREFIX + n +
-                StringExtensions.asCapitalizedName(actionMethod.getName());
-
-        for(;;) {
-            val method = MethodFinderUtils.findMethod(
-                    cls,
-                    capitalizedName,
-                    returnType, 
-                    paramTypes);
+        val capitalizedName = 
StringExtensions.asCapitalizedName(actionMethod.getName());
+
+        val searchRequest = 
ParameterSupport.ParamSupportingMethodSearchRequest.builder()
+                .processMethodContext(processMethodContext)
+                .returnType(ReturnType.SAME_AS_PARAMETER_TYPE)
+                .paramIndexToMethodName(paramIndex -> 
+                    MethodLiteralConstants.DEFAULT_PREFIX + paramIndex + 
capitalizedName)
+                .build();
+        
+        ParameterSupport.findParamSupportingMethods(searchRequest, 
searchResult -> {
             
-            if(method != null) {
-                return method;
-            }
+            val defaultMethod = searchResult.getSupportingMethod();
+            val paramIndex = searchResult.getParamIndex();
             
-            if(paramTypes.length==0) {
-                break;
+            processMethodContext.removeMethod(defaultMethod);
+
+            if 
(facetedMethod.containsNonFallbackFacet(ActionDefaultsFacet.class)) {
+                val cls = processMethodContext.getCls();
+                throw new MetaModelException(cls + " uses both old and new 
default syntax for " 
+                        + actionMethod.getName() + "(...) - must use one or 
other");
             }
             
-            // remove last, and search again
-            paramTypes = _Arrays.removeByIndex(paramTypes, 
paramTypes.length-1);
-        }
-        
-        return null;
+            // add facets directly to parameters, not to actions
+            val paramAsHolder = parameters.get(paramIndex);
+            //val translationContext = 
paramAsHolder.getIdentifier().toFullIdentityString();
+            
+            super.addFacet(
+                    new ActionParameterDefaultsFacetViaMethod(
+                            defaultMethod, paramIndex, paramAsHolder));
+        });
     }
+    
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
index 2573a5c..32e0aee 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
@@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.DependentArgUtils;
-import 
org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType;
+import org.apache.isis.core.metamodel.facets.ParameterSupport;
+import 
org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import 
org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import 
org.apache.isis.core.metamodel.facets.param.disable.ActionParameterDisabledFacet;
@@ -60,14 +60,14 @@ extends MethodPrefixBasedFacetFactoryAbstract  {
         val actionMethod = processMethodContext.getMethod();
         val capitalizedName = 
StringExtensions.asCapitalizedName(actionMethod.getName());
 
-        val searchRequest = 
DependentArgUtils.ParamSupportingMethodSearchRequest.builder()
+        val searchRequest = 
ParameterSupport.ParamSupportingMethodSearchRequest.builder()
                 .processMethodContext(processMethodContext)
                 .returnType(ReturnType.TEXT)
                 .paramIndexToMethodName(paramIndex -> 
                     MethodLiteralConstants.DISABLE_PREFIX + paramIndex + 
capitalizedName)
                 .build();
         
-        DependentArgUtils.findParamSupportingMethods(searchRequest, 
searchResult -> {
+        ParameterSupport.findParamSupportingMethods(searchRequest, 
searchResult -> {
             
             val disableMethod = searchResult.getSupportingMethod();
             val paramIndex = searchResult.getParamIndex();
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
index e1893b8..6b18caa 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
@@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.DependentArgUtils;
-import 
org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType;
+import org.apache.isis.core.metamodel.facets.ParameterSupport;
+import 
org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import 
org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import 
org.apache.isis.core.metamodel.facets.param.hide.ActionParameterHiddenFacet;
@@ -58,14 +58,14 @@ public class ActionParameterHiddenFacetViaMethodFactory 
extends MethodPrefixBase
         val actionMethod = processMethodContext.getMethod();
         val capitalizedName = 
StringExtensions.asCapitalizedName(actionMethod.getName());
 
-        val searchRequest = 
DependentArgUtils.ParamSupportingMethodSearchRequest.builder()
+        val searchRequest = 
ParameterSupport.ParamSupportingMethodSearchRequest.builder()
                 .processMethodContext(processMethodContext)
                 .returnType(ReturnType.BOOLEAN)
                 .paramIndexToMethodName(paramIndex -> 
                     MethodLiteralConstants.HIDE_PREFIX + paramIndex + 
capitalizedName)
                 .build();
         
-        DependentArgUtils.findParamSupportingMethods(searchRequest, 
searchResult -> {
+        ParameterSupport.findParamSupportingMethods(searchRequest, 
searchResult -> {
             
             val hideMethod = searchResult.getSupportingMethod();
             val paramIndex = searchResult.getParamIndex();
diff --git 
a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java
 
b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java
new file mode 100644
index 0000000..7668f49
--- /dev/null
+++ 
b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java
@@ -0,0 +1,131 @@
+/*
+ *  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.testdomain.model.good;
+
+import java.util.Collection;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.incubator.model.applib.annotation.Model;
+
+import lombok.Value;
+import lombok.experimental.Accessors;
+
+@DomainObject(nature = Nature.VIEW_MODEL)
+public class ProperParameterSupport {
+
+    
+    @Value @Accessors(fluent = true) // fluent so we can replace this with 
Java(14+) records later
+    static class Parameters {
+        String p0;
+        int p1;
+        boolean p2;
+    }
+    
+    @Action
+    public void act(
+            String p0,
+            int p1,
+            boolean p2) {
+    }
+
+    // -- PARAM 0 (String)
+    
+    @Model
+    public String default0Act(Parameters p) {
+        return null;
+    }
+    
+    @Model
+    public Collection<String> choices0Act(Parameters p) {
+        return null;
+    }
+    
+    @Model
+    public Collection<String> autoComplete0Act(Parameters p, String search) {
+        return null;
+    }
+    
+    @Model
+    public boolean hide0Act(Parameters p) {
+        return false;
+    }
+    
+    @Model
+    public String disable0Act(Parameters p) {
+        return null;
+    }
+    
+    // -- PARAM 1 (int)
+    
+    @Model
+    public int default1Act(Parameters p) {
+        return 0;
+    }
+    
+    @Model
+    public int[] choices1Act(Parameters p) {
+        return null;
+    }
+    
+    @Model
+    public int[] autoComplete1Act(Parameters p, String search) {
+        return null;
+    }
+    
+    @Model
+    public boolean hide1Act(Parameters p) {
+        return false;
+    }
+    
+    @Model
+    public String disable1Act(Parameters p) {
+        return null;
+    }
+    
+    // -- PARAM 2 (boolean)
+    
+    @Model
+    public boolean default2Act(Parameters p) {
+        return false;
+    }
+    
+    @Model
+    public boolean[] choices2Act(Parameters p) {
+        return null;
+    }
+    
+    @Model
+    public boolean[] autoComplete2Act(Parameters p, String search) {
+        return null;
+    }
+    
+    @Model
+    public boolean hide2Act(Parameters p) {
+        return false;
+    }
+    
+    @Model
+    public String disable2Act(Parameters p) {
+        return null;
+    }
+    
+    
+}
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
index d1d68df..963f271 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
@@ -32,12 +32,8 @@ final class FailureUtil {
 
     public static HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
 
-        // legacy of
-        // return (ex instanceof org.jboss.resteasy.spi.Failure)
-        //                ? 
RestfulResponse.HttpStatusCode.statusFor(((org.jboss.resteasy.spi.Failure)ex).getErrorCode())
-        //                        : null;
-        
-        val errorCodeGetter = MethodFinderUtils.findMethod(ex.getClass(), 
"getErrorCode", int.class);
+        val errorCodeGetter = MethodFinderUtils.findNoArgMethod(ex.getClass(), 
"getErrorCode", int.class)
+                .orElse(null);
         if(errorCodeGetter!=null) {
             try {
                 val errorCode = (int)errorCodeGetter.invoke(ex);
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
index 3dd27f0..58b7ae3 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
@@ -200,7 +200,7 @@ class DomainResourceHelper {
         
         val where = resourceContext.getWhere();
         
-        val actionInteraction = ActionInteraction.start(objectAdapter, 
actionId)
+        val actionInteraction = (ActionInteraction) 
ActionInteraction.start(objectAdapter, actionId)
         .checkVisibility(where)
         .checkUsability(where, intent)
         .checkSemanticConstraint(semanticConstraint)

Reply via email to