You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/12/17 16:22:03 UTC

[isis] branch master updated: ISIS-2226: some improvements: using Can instead of T[]

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


The following commit(s) were added to refs/heads/master by this push:
     new 8374d8b  ISIS-2226: some improvements: using Can<T> instead of T[]
8374d8b is described below

commit 8374d8b53ffe69c7a34b2cf28f58f788123b8d76
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 17 17:21:52 2019 +0100

    ISIS-2226: some improvements: using Can<T> instead of T[]
---
 .../isis/metamodel/facets/DomainEventHelper.java   |  7 +--
 .../disable/ActionParameterDisabledFacet.java      |  3 +-
 .../ActionParameterDisabledFacetViaMethod.java     |  4 +-
 .../param/hide/ActionParameterHiddenFacet.java     |  3 +-
 .../hide/ActionParameterHiddenFacetAbstract.java   | 11 +++--
 .../ActionParameterHiddenFacetViaMethod.java       |  4 +-
 .../interactions/ActionArgUsabilityContext.java    | 32 ++++++-------
 .../interactions/ActionArgVisibilityContext.java   | 38 +++++++--------
 .../apache/isis/metamodel/spec/ManagedObject.java  | 12 +++++
 .../spec/feature/ObjectActionParameter.java        | 56 ++++++++--------------
 .../specimpl/ObjectActionParameterAbstract.java    | 41 ++++++++--------
 .../wicket/model/models/ActionArgumentModel.java   |  3 +-
 .../viewer/wicket/model/models/ActionModel.java    |  4 +-
 .../viewer/wicket/model/models/ScalarModel.java    | 49 +++++++++----------
 .../components/actions/ActionParametersForm.java   | 55 +++++++++++----------
 .../components/scalars/ScalarPanelAbstract2.java   | 12 +++--
 .../scalars/ScalarPanelSelect2Abstract.java        | 32 +++++++------
 .../scalars/reference/ReferencePanel.java          |  7 +--
 .../valuechoices/ValueChoicesSelect2Panel.java     |  9 ++--
 19 files changed, 193 insertions(+), 189 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
index 2e27420..a05d2c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
@@ -37,6 +37,7 @@ import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.metamodel.services.events.MetamodelEventService;
 import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 
@@ -127,14 +128,14 @@ public class DomainEventHelper {
                     final List<ObjectActionParameter> parameters = objectAction.getParameters();
 
                     final List<String> parameterNames = parameters.stream()
-                            .map(ObjectActionParameter.Functions.GET_NAME)
+                            .map(ObjectActionParameter::getName)
                             .collect(Collectors.toList());
 
                     final List<Class<?>> parameterTypes = parameters.stream()
-                            .map(ObjectActionParameter.Functions.GET_TYPE)
+                            .map(ObjectActionParameter::getSpecification)
+                            .map(ObjectSpecification::getCorrespondingClass)
                             .collect(Collectors.toList());
 
-
                     event.setParameterNames(Collections.unmodifiableList(parameterNames));
                     event.setParameterTypes(Collections.unmodifiableList(parameterTypes));
                 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
index 6790aeb..2a9ab95 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.metamodel.facets.param.disable;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.DisablingInteractionAdvisor;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -35,5 +36,5 @@ public interface ActionParameterDisabledFacet extends Facet, DisablingInteractio
     /**
      * Reason why the parameter is disabled, or <tt>null</tt> if okay.
      */
-    public String disabledReason(ManagedObject target, ManagedObject[] arguments);
+    public String disabledReason(ManagedObject target, Can<ManagedObject> arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
index a4ce437..39e29ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
@@ -67,10 +67,10 @@ public class ActionParameterDisabledFacetViaMethod extends ActionParameterDisabl
     @Override
     public String disabledReason(
             final ManagedObject owningAdapter, 
-            final ManagedObject[] argumentAdapters) {
+            final Can<ManagedObject> argumentAdapters) {
         
         final Object returnValue = ManagedObject.InvokeUtil
-                .invokeAutofit(method, owningAdapter, Can.ofArray(argumentAdapters));
+                .invokeAutofit(method, owningAdapter, argumentAdapters);
         if(returnValue instanceof String) {
             return (String) returnValue;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
index 6c39307..d1a773b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.metamodel.facets.param.hide;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.HidingInteractionAdvisor;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -36,5 +37,5 @@ public interface ActionParameterHiddenFacet extends Facet, HidingInteractionAdvi
     /**
      * Whether the parameter is hidden.
      */
-    public boolean isHidden(ManagedObject target, ManagedObject[] arguments);
+    public boolean isHidden(ManagedObject target, Can<ManagedObject> arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java
index a05f34a..1979696 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacetAbstract.java
@@ -26,8 +26,9 @@ import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.interactions.ActionArgVisibilityContext;
 import org.apache.isis.metamodel.interactions.VisibilityContext;
 
-public abstract class ActionParameterHiddenFacetAbstract extends FacetAbstract implements
-ActionParameterHiddenFacet {
+public abstract class ActionParameterHiddenFacetAbstract 
+extends FacetAbstract 
+implements ActionParameterHiddenFacet {
 
     public static Class<? extends Facet> type() {
         return ActionParameterHiddenFacet.class;
@@ -43,6 +44,10 @@ ActionParameterHiddenFacet {
             return null;
         }
         final ActionArgVisibilityContext actionArgVisibilityContext = (ActionArgVisibilityContext) context;
-        return isHidden(actionArgVisibilityContext.getTarget(), actionArgVisibilityContext.getArgs()) ? "Hidden" : null;
+        return isHidden(
+                actionArgVisibilityContext.getTarget(), 
+                actionArgVisibilityContext.getArgs()) 
+                ? "Hidden" 
+                        : null;
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
index b529188..430d162 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
@@ -59,10 +59,10 @@ public class ActionParameterHiddenFacetViaMethod extends ActionParameterHiddenFa
     @Override
     public boolean isHidden(
             final ManagedObject owningAdapter, 
-            final ManagedObject[] argumentAdapters) {
+            final Can<ManagedObject> argumentAdapters) {
         
         final Object returnValue = ManagedObject.InvokeUtil
-                .invokeAutofit(method, owningAdapter, Can.ofArray(argumentAdapters));
+                .invokeAutofit(method, owningAdapter, argumentAdapters);
         if(returnValue instanceof Boolean) {
             return (Boolean) returnValue;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
index 04804f3..e45fd3e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentUsabilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -31,6 +32,8 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import static org.apache.isis.metamodel.spec.ManagedObject.unwrapPojo;
 import static org.apache.isis.metamodel.spec.ManagedObject.unwrapPojoArray;
 
+import lombok.Getter;
+
 /**
  * See {@link InteractionContext} for overview; analogous to
  * {@link ActionArgumentEvent}.
@@ -39,18 +42,24 @@ public class ActionArgUsabilityContext
 extends UsabilityContext<ActionArgumentUsabilityEvent> 
 implements ActionInteractionContext {
 
-    private final ObjectAction objectAction;
-    private final ManagedObject[] args;
-    private final int position;
+    @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
+    @Getter private final Can<ManagedObject> args;
+    @Getter private final int position;
 
     public ActionArgUsabilityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ManagedObject[] args,
+            final Can<ManagedObject> args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        super(InteractionContextType.ACTION_PARAMETER_USABLE, targetAdapter, id, interactionInitiatedBy, Where.OBJECT_FORMS);
+        
+        super(InteractionContextType.ACTION_PARAMETER_USABLE,
+                targetAdapter, 
+                id, 
+                interactionInitiatedBy, 
+                Where.OBJECT_FORMS);
+        
         this.objectAction = objectAction;
 
         this.args = args;
@@ -58,19 +67,6 @@ implements ActionInteractionContext {
     }
 
     @Override
-    public ObjectAction getObjectAction() {
-        return objectAction;
-    }
-
-    public ManagedObject[] getArgs() {
-        return args;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    @Override
     public ActionArgumentUsabilityEvent createInteractionEvent() {
         return new ActionArgumentUsabilityEvent(
                 unwrapPojo(getTarget()), 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
index 54c6168..41a01fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentVisibilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -31,24 +32,34 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import static org.apache.isis.metamodel.spec.ManagedObject.unwrapPojo;
 import static org.apache.isis.metamodel.spec.ManagedObject.unwrapPojoArray;
 
+import lombok.Getter;
+
 /**
  * See {@link InteractionContext} for overview; analogous to
  * {@link ActionArgumentEvent}.
  */
-public class ActionArgVisibilityContext extends VisibilityContext<ActionArgumentVisibilityEvent> implements ActionInteractionContext {
-
-    private final ObjectAction objectAction;
-    private final ManagedObject[] args;
-    private final int position;
+public class ActionArgVisibilityContext 
+extends VisibilityContext<ActionArgumentVisibilityEvent> 
+implements ActionInteractionContext {
 
+    @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
+    @Getter private final Can<ManagedObject> args;
+    @Getter private final int position;
+    
     public ActionArgVisibilityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ManagedObject[] args,
+            final Can<ManagedObject> args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        super(InteractionContextType.ACTION_PARAMETER_VISIBLE, targetAdapter, id, interactionInitiatedBy, Where.OBJECT_FORMS);
+        
+        super(InteractionContextType.ACTION_PARAMETER_VISIBLE, 
+                targetAdapter, 
+                id, 
+                interactionInitiatedBy, 
+                Where.OBJECT_FORMS);
+        
         this.objectAction = objectAction;
 
         this.args = args;
@@ -56,19 +67,6 @@ public class ActionArgVisibilityContext extends VisibilityContext<ActionArgument
     }
 
     @Override
-    public ObjectAction getObjectAction() {
-        return objectAction;
-    }
-
-    public ManagedObject[] getArgs() {
-        return args;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    @Override
     public ActionArgumentVisibilityEvent createInteractionEvent() {
         return new ActionArgumentVisibilityEvent(
                 unwrapPojo(getTarget()), getIdentifier(), unwrapPojoArray(getArgs()), getPosition());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 32c7bcd..ddac7c5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -241,6 +241,18 @@ public interface ManagedObject {
         return adapter != null ? adapter.getPojo() : null;
     }
 
+    public static Object[] unwrapPojoArray(final Can<ManagedObject> adapters) {
+        if (adapters == null) {
+            return null;
+        }
+        final Object[] unwrappedObjects = new Object[adapters.size()];
+        int i = 0;
+        for (final ManagedObject adapter : adapters) {
+            unwrappedObjects[i++] = unwrapPojo(adapter);
+        }
+        return unwrappedObjects;
+    }
+    
     public static Object[] unwrapPojoArray(final ManagedObject[] adapters) {
         if (adapters == null) {
             return null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
index b440c20..c1e550d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.spec.feature;
 
-import java.util.function.Function;
 import java.util.function.Predicate;
 
 import javax.annotation.Nullable;
@@ -75,10 +74,10 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
 
     // internal API
     ActionArgValidityContext createProposedArgumentInteractionContext(
-            final ManagedObject targetObject,
-            final ManagedObject[] args,
-            final int position,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject targetObject,
+            ManagedObject[] args,
+            int position,
+            InteractionInitiatedBy interactionInitiatedBy);
 
 
     /**
@@ -92,10 +91,10 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * user can choose from, based on the input search argument.
      */
     ManagedObject[] getAutoComplete(
-            final ManagedObject adapter,
-            final Can<ManagedObject> dependentArgs,
-            final String searchArg,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject adapter,
+            Can<ManagedObject> dependentArgs,
+            String searchArg,
+            InteractionInitiatedBy interactionInitiatedBy);
 
 
 
@@ -111,40 +110,40 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * user can choose from.
      */
     ManagedObject[] getChoices(
-            final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject adapter,
+            Can<ManagedObject> dependentArgs,
+            InteractionInitiatedBy interactionInitiatedBy);
 
 
     ManagedObject getDefault(
             ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
-            final Integer paramNumUpdated);
+            Can<ManagedObject> dependentArgs,
+            Integer paramNumUpdated);
 
 
     /**
      * Whether this parameter is visible given the entered previous arguments
      * @param targetAdapter
-     * @param pendingArguments
+     * @param dependentArgs
      * @param interactionInitiatedBy
      * @return
      */
     Consent isVisible(
-            final ManagedObject targetAdapter,
-            final ManagedObject[] pendingArguments,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject targetAdapter,
+            Can<ManagedObject> dependentArgs,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Whether this parameter is disabled given the entered previous arguments
      * @param targetAdapter
-     * @param pendingArguments
+     * @param dependentArgs
      * @param interactionInitiatedBy
      * @return
      */
     Consent isUsable(
-            final ManagedObject targetAdapter,
-            final ManagedObject[] pendingArguments,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject targetAdapter,
+            Can<ManagedObject> dependentArgs,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Whether proposed value for this parameter is valid.
@@ -160,19 +159,6 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
             final InteractionInitiatedBy interactionInitiatedBy);
 
     @Vetoed
-    public static class Functions {
-        public static final Function<ObjectActionParameter, String> GET_NAME =
-                ObjectActionParameter::getName;
-
-        public static final Function<ObjectActionParameter, Class<?>> GET_TYPE = 
-                (final ObjectActionParameter input) ->
-        input.getSpecification().getCorrespondingClass();
-
-        private Functions(){}
-
-    }
-
-    @Vetoed
     public static class Predicates {
         private Predicates(){}
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 41a3a44..751759a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -268,10 +268,10 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public ManagedObject[] getChoices(
             final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        val args = argsForDefaultOrChoices(adapter, Can.ofArray(argumentsIfAvailable));
+        val args = argsForDefaultOrChoices(adapter, dependentArgs);
         val target = targetForDefaultOrChoices(adapter);
 
         return findChoices(target, args, interactionInitiatedBy);
@@ -279,41 +279,33 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ManagedObject[] findChoices(
             final ManagedObject target,
-            final Can<ManagedObject> args,
+            final Can<ManagedObject> dependentArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         final List<ManagedObject> adapters = _Lists.newArrayList();
         final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
 
         if (facet != null) {
-            final Object[] choices = facet.getChoices(target, args, interactionInitiatedBy);
+            final Object[] choices = facet.getChoices(target, dependentArgs, interactionInitiatedBy);
             checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
             for (final Object choice : choices) {
                 ManagedObject adapter = choice != null? getObjectManager().adapt(choice) : null;
                 adapters.add(adapter);
             }
         }
-        // now incorporated into above choices processing (BoundedFacet is no more)
-        /*
-           if (adapters.size() == 0 && BoundedFacetUtils.isBoundedSet(getSpecification())) {
-            addAllInstancesForType(adapters);
-        }
-         */
         return adapters.toArray(new ManagedObject[adapters.size()]);
     }
 
-
-
     // -- Defaults
 
     @Override
     public ManagedObject getDefault(
             final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final Integer paramNumUpdated) {
 
         final ManagedObject target = targetForDefaultOrChoices(adapter);
-        val args = argsForDefaultOrChoices(adapter, Can.ofArray(argumentsIfAvailable));
+        val args = argsForDefaultOrChoices(adapter, dependentArgs);
 
         return findDefault(target, args, paramNumUpdated);
     }
@@ -390,22 +382,22 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ActionArgVisibilityContext createArgumentVisibilityContext(
             final ManagedObject objectAdapter,
-            final ManagedObject[] proposedArguments,
+            final Can<ManagedObject> dependentArgs,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return new ActionArgVisibilityContext(
-                objectAdapter, parentAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
+                objectAdapter, parentAction, getIdentifier(), dependentArgs, position, interactionInitiatedBy);
     }
 
     @Override
     public Consent isVisible(
             final ManagedObject targetAdapter,
-            final ManagedObject[] pendingArguments,
+            final Can<ManagedObject> dependentArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final VisibilityContext<?> ic = createArgumentVisibilityContext(
-                targetAdapter, pendingArguments, getNumber(), interactionInitiatedBy
+                targetAdapter, dependentArgs, getNumber(), interactionInitiatedBy
                 );
 
         final InteractionResult visibleResult = InteractionUtils.isVisibleResult(this, ic);
@@ -418,22 +410,27 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ActionArgUsabilityContext createArgumentUsabilityContext(
             final ManagedObject objectAdapter,
-            final ManagedObject[] proposedArguments,
+            final Can<ManagedObject> dependentArgs,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return new ActionArgUsabilityContext(
-                objectAdapter, parentAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
+                objectAdapter, 
+                parentAction, 
+                getIdentifier(), 
+                dependentArgs, 
+                position, 
+                interactionInitiatedBy);
     }
 
     @Override
     public Consent isUsable(
             final ManagedObject targetAdapter,
-            final ManagedObject[] pendingArguments,
+            final Can<ManagedObject> dependentArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final UsabilityContext<?> ic = createArgumentUsabilityContext(
-                targetAdapter, pendingArguments, getNumber(), interactionInitiatedBy
+                targetAdapter, dependentArgs, getNumber(), interactionInitiatedBy
                 );
 
         final InteractionResult usableResult = InteractionUtils.isUsableResult(this, ic);
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
index 2c43b83..17f5a4f 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.wicket.model.IModel;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 
@@ -29,5 +30,5 @@ public interface ActionArgumentModel extends IModel<ManagedObject> {
 
     void reset();
 
-    void setActionArgsHint(ManagedObject[] argumentsAsArray);
+    void setActionArgsHint(Can<ManagedObject> arguments);
 }
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index fc4d901..0087c98 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -512,8 +512,8 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         val targetAdapter = getTargetAdapter();
         final ManagedObject[] proposedArguments = getArgumentsAsArray();
         final ObjectAction objectAction = getAction();
-        final Consent validity = objectAction.isProposedArgumentSetValid(targetAdapter, proposedArguments,
-                InteractionInitiatedBy.USER);
+        final Consent validity = objectAction
+                .isProposedArgumentSetValid(targetAdapter, proposedArguments, InteractionInitiatedBy.USER);
         return validity.isAllowed() ? null : validity.getReason();
     }
 
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 49c1184..fdee81d 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -58,6 +58,8 @@ import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.webapp.context.memento.ObjectMemento;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.val;
 
 
@@ -187,12 +189,13 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argsIfAvailable,
+                    final Can<ManagedObject> dependentArgs,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
-                final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
+                final OneToOneAssociation property = propertyMemento
+                        .getProperty(scalarModel.getSpecificationLoader());
                 ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 return property.getDefault(parentAdapter);
             }
@@ -207,11 +210,12 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argumentsIfAvailable,
+                    final Can<ManagedObject> dependentArgs,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
-                final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
+                final OneToOneAssociation property = propertyMemento
+                        .getProperty(scalarModel.getSpecificationLoader());
                 ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final ManagedObject[] choices = property.getChoices(
                         parentAdapter,
@@ -421,7 +425,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argsIfAvailable,
+                    final Can<ManagedObject> dependentArgs,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
@@ -430,7 +434,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
 
                 //XXX lombok issue, no val
                 ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
-                return actionParameter.getDefault(parentAdapter, argsIfAvailable, paramNumUpdated);
+                return actionParameter.getDefault(parentAdapter, dependentArgs, paramNumUpdated);
             }
 
             @Override
@@ -442,7 +446,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argumentsIfAvailable,
+                    final Can<ManagedObject> dependentArgs,
                     final AuthenticationSession authenticationSession) {
                 
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
@@ -454,7 +458,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
                 final ManagedObject[] choices =
                         actionParameter.getChoices(
                                 parentAdapter, 
-                                argumentsIfAvailable,
+                                dependentArgs,
                                 InteractionInitiatedBy.USER);
                 return choicesAsList(choices);
             }
@@ -631,14 +635,14 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
 
         public abstract ManagedObject getDefault(
                 ScalarModel scalarModel,
-                ManagedObject[] argsIfAvailable,
+                Can<ManagedObject> dependentArgs,
                 int paramNumUpdated,
                 AuthenticationSession authenticationSession);
 
         public abstract boolean hasChoices(ScalarModel scalarModel);
         public abstract List<ManagedObject> getChoices(
                 ScalarModel scalarModel,
-                ManagedObject[] argumentsIfAvailable,
+                Can<ManagedObject> dependentArgs,
                 AuthenticationSession authenticationSession);
 
         public abstract boolean hasAutoComplete(ScalarModel scalarModel);
@@ -923,9 +927,10 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
     }
 
     public List<ManagedObject> getChoices(
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final AuthenticationSession authenticationSession) {
-        return kind.getChoices(this, argumentsIfAvailable, authenticationSession);
+        
+        return kind.getChoices(this, dependentArgs, authenticationSession);
     }
 
     public boolean hasAutoComplete() {
@@ -936,6 +941,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             final Can<ManagedObject> dependentArgs,
             final String searchTerm,
             final AuthenticationSession authenticationSession) {
+        
         return kind.getAutoComplete(this, dependentArgs, searchTerm, authenticationSession);
     }
 
@@ -1241,25 +1247,14 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
                 associatedActionsIfProperty().hasAssociatedActionWithInlineAsIfEdit();
     }
 
-    // //////////////////////////////////////
-
-    /**
-     * transient because only temporary hint.
-     */
-    private transient ManagedObject[] actionArgsHint;
-
-    @Override
-    public void setActionArgsHint(ManagedObject[] actionArgsHint) {
-        this.actionArgsHint = actionArgsHint;
-    }
-
     /**
      * The initial call of choicesXxx() for any given scalar argument needs the current values
      * of all args (possibly as initialized through a defaultNXxx().
+     * @implNote transient because only temporary hint.
      */
-    public ManagedObject[] getActionArgsHint() {
-        return actionArgsHint;
-    }
+    @Getter @Setter
+    private transient Can<ManagedObject> actionArgsHint;
+
 
     @Override
     public String toString() {
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index d019897..3abb51e 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -29,6 +29,8 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -78,7 +80,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
             rv.add(container);
 
             final ActionArgumentModel actionArgumentModel = actionModel.getArgumentModel(apm);
-            actionArgumentModel.setActionArgsHint(actionModel.getArgumentsAsArray());
+            actionArgumentModel.setActionArgsHint(Can.ofArray(actionModel.getArgumentsAsArray()));
             final ScalarPanelAbstract2 paramPanel = newParamPanel(container, actionArgumentModel);
             paramPanels.add(paramPanel);
 
@@ -158,32 +160,33 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
 
         final int paramNumberUpdated = scalarPanelUpdated.getModel().getParameterMemento().getNumber();
         
-        {
-            final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
-
-            final int numParams = action.getParameterCount();
-
-            // only updates subsequent parameter panels to this one.
-            for (int paramNumToUpdate = paramNumberUpdated + 1; paramNumToUpdate < numParams; paramNumToUpdate++) {
-                final ScalarPanelAbstract2 paramPanel = paramPanels.get(paramNumToUpdate);
-                final ScalarPanelAbstract2.Repaint repaint = paramPanel
-                        .updateIfNecessary(actionModel, paramNumberUpdated, paramNumToUpdate, target);
-
-                final boolean multiPart = isMultiPart();
-                switch (repaint) {
-                case ENTIRE_FORM:
-                    target.add(this);
-                    break;
-                case PARAM_ONLY:
-                    paramPanel.repaint(target);
-                    break;
-                case NOTHING:
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown: " + repaint);
-                }
+        val action = actionModel.getActionMemento().getAction(getSpecificationLoader());
+
+        final int numParams = action.getParameterCount();
+
+        // only updates subsequent parameter panels to this one.
+        for (int i = paramNumberUpdated + 1; i < numParams; i++) {
+
+            val paramNumToUpdate = i;
+            val paramPanel = paramPanels.get(paramNumToUpdate);
+            val repaint = paramPanel
+                    .updateIfNecessary(actionModel, paramNumberUpdated, paramNumToUpdate, target);
+
+            final boolean multiPart = isMultiPart(); //TODO keep side-effects(?) or remove
+
+            switch (repaint) {
+            case ENTIRE_FORM:
+                target.add(this);
+                break;
+            case PARAM_ONLY:
+                paramPanel.repaint(target);
+                break;
+            case NOTHING:
+                break;
+            default:
+                throw _Exceptions.unmatchedCase(repaint);
             }
-        } 
+        }
 
         // previously this method was also doing:
         // target.add(this);
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index b4fd2dc..3c4a139 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -39,6 +39,7 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.ioc.BeanSort;
@@ -134,7 +135,8 @@ implements ScalarModelSubscriber2 {
             final AjaxRequestTarget target) {
 
         final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
-        final ManagedObject[] pendingArguments = actionModel.getArgumentsAsArray();
+        val pendingArgumentArray = actionModel.getArgumentsAsArray();
+        val pendingArguments = Can.ofArray(pendingArgumentArray);
 
 
         // could almost certainly simplify this... (used by visibility and usability checks)
@@ -143,7 +145,8 @@ implements ScalarModelSubscriber2 {
         val realTargetAdapter = action.realTargetAdapter(targetAdapter);
 
         // check visibility
-        final Consent visibilityConsent = actionParameter.isVisible(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
+        final Consent visibilityConsent = actionParameter
+                .isVisible(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
 
         final boolean visibilityBefore = isVisible();
         final boolean visibilityAfter = visibilityConsent.isAllowed();
@@ -151,7 +154,8 @@ implements ScalarModelSubscriber2 {
 
 
         // check usability
-        final Consent usabilityConsent = actionParameter.isUsable(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
+        final Consent usabilityConsent = actionParameter
+                .isUsable(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
 
         final boolean usabilityBefore = isEnabled();
         final boolean usabilityAfter = usabilityConsent.isAllowed();
@@ -173,7 +177,7 @@ implements ScalarModelSubscriber2 {
         final ActionParameterMemento apm = new ActionParameterMemento(actionParameter);
         final ActionArgumentModel actionArgumentModel = actionModel.getArgumentModel(apm);
 
-        val pendingArg = pendingArguments[paramNumToPossiblyUpdate];
+        val pendingArg = pendingArgumentArray[paramNumToPossiblyUpdate];
 
         if (defaultIfAny != null) {
             scalarModel.setObject(defaultIfAny);
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index ac721fc..e9a609d 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -32,6 +32,7 @@ import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 import org.wicketstuff.select2.ChoiceProvider;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -112,9 +113,9 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     /**
      * sets up the choices, also ensuring that any currently held value is compatible.
      */
-    private void setProviderAndCurrAndPending(Select2 select2, ManagedObject[] argsIfAvailable) {
+    private void setProviderAndCurrAndPending(Select2 select2, Can<ManagedObject> dependentArgs) {
 
-        final ChoiceProvider<ObjectMemento> choiceProvider = buildChoiceProvider(argsIfAvailable);
+        final ChoiceProvider<ObjectMemento> choiceProvider = buildChoiceProvider(dependentArgs);
 
         select2.setProvider(choiceProvider);
         getModel().clearPending();
@@ -126,12 +127,12 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     }
 
     /**
-     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ManagedObject[])})
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, Can<ManagedObject>)})
      */
-    protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable);
+    protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> dependentArgs);
 
     /**
-     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ManagedObject[])})
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, Can<ManagedObject>)})
      */
     protected abstract void syncIfNull(Select2 select2, List<ObjectMemento> choicesMementos);
 
@@ -178,27 +179,28 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
             final int paramNumToPossiblyUpdate,
             final AjaxRequestTarget target) {
 
-        final ManagedObject[] argumentsAsArray = actionModel.getArgumentsAsArray();
+        val arguments = Can.ofArray(actionModel.getArgumentsAsArray());
 
-        final Repaint repaint =
-                super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate, target);
+        val repaint = super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate, target);
 
-        final boolean choicesUpdated = updateChoices(argumentsAsArray);
+        final boolean choicesUpdated = updateChoices(arguments);
 
-        if (repaint == Repaint.NOTHING)
-            if (choicesUpdated)
+        if (repaint == Repaint.NOTHING) {
+            if (choicesUpdated) {
                 return Repaint.PARAM_ONLY;
-            else
+            } else {
                 return Repaint.NOTHING;
-        else
+            }
+        } else {
             return repaint;
+        }
     }
 
-    private boolean updateChoices(ManagedObject[] argsIfAvailable) {
+    private boolean updateChoices(Can<ManagedObject> dependentArgs) {
         if (select2 == null) {
             return false;
         }
-        setProviderAndCurrAndPending(select2, argsIfAvailable);
+        setProviderAndCurrAndPending(select2, dependentArgs);
 
         return true;
     }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index e8fee23..2182da8 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -35,6 +35,7 @@ import org.apache.wicket.model.Model;
 import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Settings;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.facets.object.autocomplete.AutoCompleteFacet;
@@ -341,18 +342,18 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     // //////////////////////////////////////
 
     @Override
-    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable) {
+    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> dependentArgs) {
         
         val commonContext = super.getCommonContext();
         
         if (getModel().hasChoices()) {
-            val choices = getModel().getChoices(argsIfAvailable, commonContext.getAuthenticationSession());
+            val choices = getModel().getChoices(dependentArgs, commonContext.getAuthenticationSession());
             val choiceMementos = _Lists.map(choices, commonContext::mementoFor);
             return new ObjectAdapterMementoProviderForReferenceChoices(getModel(), choiceMementos);
         }
 
         if(getModel().hasAutoComplete()) {
-            val dependentArgMementos = _NullSafe.stream(argsIfAvailable)
+            val dependentArgMementos = dependentArgs.stream()
                     .map(commonContext::mementoFor)
                     .collect(Collectors.toCollection(ArrayList::new)); // serializable
             return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 9b2d1e2..15f09de 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -31,6 +31,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.wicketstuff.select2.ChoiceProvider;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -76,12 +77,12 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     }
 
 
-    private List<ObjectMemento> getChoiceMementos(final ManagedObject[] argumentsIfAvailable) {
+    private List<ObjectMemento> getChoiceMementos(final Can<ManagedObject> dependentArgs) {
         
         val commonContext = super.getCommonContext();
         
         val choices =
-                scalarModel.getChoices(argumentsIfAvailable, commonContext.getAuthenticationSession());
+                scalarModel.getChoices(dependentArgs, commonContext.getAuthenticationSession());
 
         return _Lists.map(choices, commonContext::mementoFor);
     }
@@ -167,8 +168,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
     // (choice vs autoComplete).  Here though - because values don't currently support autoComplete - no branch is required
     @Override
-    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable) {
-        final List<ObjectMemento> choicesMementos = getChoiceMementos(argsIfAvailable);
+    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> dependentArgs) {
+        final List<ObjectMemento> choicesMementos = getChoiceMementos(dependentArgs);
         return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos);
     }