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 2022/08/23 09:08:09 UTC

[isis] branch master updated: ISIS-3165: fixes installation of incompatible choices facet

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 73ab2dcb0a ISIS-3165: fixes installation of incompatible choices facet
73ab2dcb0a is described below

commit 73ab2dcb0af7eef57b7b73cf508635bdcad50d88
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Aug 23 11:08:03 2022 +0200

    ISIS-3165: fixes installation of incompatible choices facet
---
 .../choices/ActionParameterChoicesFacetFromChoicesFromFacet.java  | 8 ++++++--
 .../postprocessors/ObjectSpecificationPostProcessorAbstract.java  | 7 -------
 .../postprocessors/all/DescribedAsFromTypePostProcessor.java      | 2 +-
 .../postprocessors/param/ChoicesAndDefaultsPostProcessor.java     | 4 ++--
 .../postprocessors/param/TypicalLengthFromTypePostProcessor.java  | 2 +-
 5 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
index 5ac3a54c63..60355097c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 import lombok.val;
@@ -38,12 +39,15 @@ extends ActionParameterChoicesFacetAbstract {
     public static Optional<ActionParameterChoicesFacet> create(
             final Optional<ChoicesFromFacet> choicesFromFacetIfAny,
             final ObjectSpecification actionOwnerSpec,
-            final FacetHolder facetHolder) {
+            final ObjectActionParameter param) {
+
         return choicesFromFacetIfAny
                 .map(ChoicesFromFacet::value)
                 .flatMap(actionOwnerSpec::getCollection)
+                // param type must be assignable from types returned by choices
+                .filter(coll->coll.getElementType().isOfType(param.getElementType()))
                 .map(coll->
-                    new ActionParameterChoicesFacetFromChoicesFromFacet(coll, facetHolder));
+                    new ActionParameterChoicesFacetFromChoicesFromFacet(coll, param.getFacetHolder()));
     }
 
     private final OneToManyAssociation choicesFromCollection;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
index a9bdabc6e0..85bb096859 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
@@ -20,9 +20,7 @@ package org.apache.isis.core.metamodel.postprocessors;
 
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract;
 
@@ -51,9 +49,4 @@ implements ObjectSpecificationPostProcessor {
         return objectMemberImpl.getFacetedMethod();
     }
 
-    protected static FacetHolder peerFor(final ObjectActionParameter param) {
-        // TODO: hacky, need to copy facet onto underlying peer, not to the param itself.
-        return param.getFacetHolder();
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java
index a6a9711fc8..3aa8716da9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java
@@ -86,7 +86,7 @@ extends ObjectSpecificationPostProcessorAbstract {
         .ifPresent(objectDescribedFacet->
             FacetUtil.addFacetIfPresent(
                     ParamDescribedFacetFromType
-                    .create(objectDescribedFacet, peerFor(parameter))));
+                    .create(objectDescribedFacet, parameter.getFacetHolder())));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
index df2e9d2d97..e45c952426 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
@@ -75,7 +75,7 @@ extends ObjectSpecificationPostProcessorAbstract {
             if(FacetUtil
                 .addFacetIfPresent(
                     ActionParameterChoicesFacetFromChoicesFromFacet
-                    .create(choicesFromFacetIfAny, objectSpecification, peerFor(param)))
+                    .create(choicesFromFacetIfAny, objectSpecification, param))
                 .isPresent()) {
 
                 // ActionParameterChoicesFacetFromChoicesFromFacet has precedence over
@@ -88,7 +88,7 @@ extends ObjectSpecificationPostProcessorAbstract {
 
             FacetUtil.addFacetIfPresent(
                     ActionParameterChoicesFacetFromChoicesFacet
-                    .create(choicesFacetIfAny, peerFor(param)));
+                    .create(choicesFacetIfAny, param.getFacetHolder()));
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java
index 7c3fed7d76..a5aa70cb65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java
@@ -53,7 +53,7 @@ extends ObjectSpecificationPostProcessorAbstract {
             .ifPresent(typicalLengthFacet ->
                     FacetUtil.addFacet(
                             TypicalLengthFacetOnParameterFromType
-                            .createWhilePostprocessing(typicalLengthFacet, peerFor(parameter))));
+                            .createWhilePostprocessing(typicalLengthFacet, parameter.getFacetHolder())));
     }
 
     @Override