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);
+ }
+ });
+ }
+
}