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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 7777a17b02 CAUSEWAY-3724: removes invalid optimization
7777a17b02 is described below

commit 7777a17b0249807f60b839aee183b474add475ed
Author: Andi Huber <[email protected]>
AuthorDate: Tue Apr 23 14:17:40 2024 +0200

    CAUSEWAY-3724: removes invalid optimization
    
    - we need to check actions parameters only once we have a concrete type
    - otherwise we might e.g. introspect interfaces that are not mean to be
    part of the meta-model, like service interfaces
---
 .../apache/causeway/applib/services/metamodel/BeanSort.java  |  6 ++----
 .../causeway/core/metamodel/commons/MetaModelVisitor.java    |  7 +++++++
 .../ActionChoicesForCollectionParameterFacetFactory.java     |  5 ++---
 .../param/ChoicesAndDefaultsPostProcessor.java               |  6 +++++-
 .../causeway/core/metamodel/progmodel/ProgrammingModel.java  | 12 ++++++++++++
 5 files changed, 28 insertions(+), 8 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/BeanSort.java
 
b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/BeanSort.java
index c87a758b41..16f4ac01dc 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/BeanSort.java
+++ 
b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/BeanSort.java
@@ -135,10 +135,8 @@ public enum BeanSort {
 
         if(isVetoed()
                 || isUnknown()
-                || isCollection()) {
-            return false;
-        }
-        if(this == MANAGED_BEAN_NOT_CONTRIBUTING) {
+                || isCollection()
+                || this == MANAGED_BEAN_NOT_CONTRIBUTING) {
             return false;
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/MetaModelVisitor.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/MetaModelVisitor.java
index a3633ab00e..d24f8f7340 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/MetaModelVisitor.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/MetaModelVisitor.java
@@ -48,6 +48,13 @@ public interface MetaModelVisitor {
     public final static Predicate<ObjectSpecification> SKIP_MANAGED_BEANS =
             spec->!spec.isInjectable();
 
+    /**
+     * non-abstract types pass this filter, if introspect-able
+     */
+    public final static Predicate<ObjectSpecification> SKIP_ABSTRACT =
+            spec->!spec.isAbstract()
+                && spec.getBeanSort().isToBeIntrospected();
+
     /** types pass this filter, if is NOT a mixin */
     public final static Predicate<ObjectSpecification> SKIP_MIXINS =
             spec->!spec.isMixin();
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
index 9b6c05b28f..40ce118c01 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
@@ -66,9 +66,8 @@ implements MetaModelRefiner {
             return;
         }
 
-        programmingModel.addValidatorSkipManagedBeans(objectSpec->{
-            // as an optimization only checking declared members (skipping 
inherited ones)
-            objectSpec.streamDeclaredActions(MixedIn.INCLUDED)
+        programmingModel.addValidatorSkipAbstract(objectSpec->{
+            objectSpec.streamAnyActions(MixedIn.INCLUDED)
             .forEach(objectAction->{
                 if(objectAction instanceof ObjectActionMixedIn) {
                     // we'll report only the mixin
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
index 23cbfc291e..b1175e6e88 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
 
 import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
+import org.apache.causeway.core.metamodel.commons.MetaModelVisitor;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import 
org.apache.causeway.core.metamodel.facets.object.defaults.DefaultedFacet;
@@ -117,7 +118,10 @@ extends MetaModelPostProcessorAbstract {
 
         }
 
-        checkParamHasChoicesOrAutoCompleteWhenRequired(param);
+        if(MetaModelVisitor.SKIP_ABSTRACT.test(objectSpecification)) {
+            checkParamHasChoicesOrAutoCompleteWhenRequired(param);
+        }
+
     }
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodel/ProgrammingModel.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodel/ProgrammingModel.java
index 56e25ce288..7ed75f9003 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodel/ProgrammingModel.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodel/ProgrammingModel.java
@@ -155,5 +155,17 @@ extends HasMetaModelContext {
         });
     }
 
+    default void addValidatorSkipAbstract(
+            final @NonNull Consumer<ObjectSpecification> validator,
+            final Marker ... markers) {
+
+        addValidator(new MetaModelValidatorAbstract(getMetaModelContext(), 
MetaModelValidator.SKIP_ABSTRACT) {
+            @Override
+            public void validateObjectEnter(final @NonNull ObjectSpecification 
spec) {
+                validator.accept(spec);
+            }
+        });
+    }
+
 
 }

Reply via email to