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 16f72e5886 CAUSEWAY-3710: simplifies MetaModelRefiner testing
16f72e5886 is described below

commit 16f72e58867dbf42ed1942303fbf3520cba4e92c
Author: andi-huber <[email protected]>
AuthorDate: Fri Mar 29 08:11:24 2024 +0100

    CAUSEWAY-3710: simplifies MetaModelRefiner testing
---
 .../_testing/MetaModelContext_forTesting.java      | 14 +++++++--
 .../dflt/ProgrammingModelFacetsJava11.java         | 10 +++++++
 .../specloader/ProgrammingModelServiceDefault.java | 11 +++-----
 .../facets/AbstractTestWithMetaModelContext.java   |  8 +-----
 .../ViewModelSemanticCheckingFacetFactoryTest.java |  2 +-
 .../DomainObjectAnnotationFacetFactoryTest.java    | 33 ++++------------------
 ...VersionAnnotationFacetFactoryTest_validate.java |  2 +-
 7 files changed, 33 insertions(+), 47 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index 4e8709f0c4..2f2aaa0b00 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Stream;
@@ -72,6 +73,7 @@ import 
org.apache.causeway.core.config.viewer.web.WebAppContextPath;
 import org.apache.causeway.core.metamodel.commons.ClassUtil;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.execution.MemberExecutorService;
+import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.causeway.core.metamodel.facets.object.icon.ObjectIconService;
 import 
org.apache.causeway.core.metamodel.facets.object.value.annotcfg.ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -159,8 +161,12 @@ extends MetaModelContext {
     private SpecificationLoader specificationLoader;
 
     @Builder.Default
-    private Function<MetaModelContext, ProgrammingModel> 
programmingModelFactory = ProgrammingModelFacetsJava11::new;
-
+    Can<Function<MetaModelContext, MetaModelRefiner>> refiners = Can.empty();
+    
+    @Builder.Default
+    private BiFunction<MetaModelContext, Can<MetaModelRefiner>, 
ProgrammingModel> programmingModelFactory = 
+        (mmc, refiners)->new ProgrammingModelFacetsJava11(mmc, refiners);
+    
     private InteractionService interactionService;
 
     private TranslationService translationService;
@@ -354,7 +360,9 @@ extends MetaModelContext {
         return programmingModelRef.get();
     }
     private final ProgrammingModel initProgrammingModel() {
-        val programmingModel = programmingModelFactory.apply(this);
+        var metamodelRefiners = refiners.map(factory->factory.apply(this));
+        val programmingModel = programmingModelFactory.apply(this, 
metamodelRefiners); 
+                 
         ((ProgrammingModelAbstract)programmingModel).init(new 
ProgrammingModelInitFilterDefault());
         return programmingModel;
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 44ecc13130..e3d00066e6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -16,7 +16,9 @@
  * under the License. */
 package org.apache.causeway.core.metamodel.progmodels.dflt;
 
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import 
org.apache.causeway.core.metamodel.facets.actions.action.ActionAnnotationFacetFactory;
 import 
org.apache.causeway.core.metamodel.facets.actions.action.ActionAnnotationShouldEnforceConcreteTypeToBeIncludedWithMetamodelValidator;
 import 
org.apache.causeway.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory;
@@ -105,6 +107,10 @@ public final class ProgrammingModelFacetsJava11
 extends ProgrammingModelAbstract {
 
     public ProgrammingModelFacetsJava11(final MetaModelContext mmc) {
+        this(mmc, Can.empty());
+    }
+    
+    public ProgrammingModelFacetsJava11(final MetaModelContext mmc, 
Can<MetaModelRefiner> refiners) {
         super(mmc);
 
         // act on the peer objects (FacetedMethod etc), rather than 
ObjectMembers etc
@@ -115,6 +121,10 @@ extends ProgrammingModelAbstract {
         addPostProcessors();
 
         addValidators();
+        
+        for (val metaModelRefiner : refiners) {
+            metaModelRefiner.refineProgrammingModel(this);
+        }
     }
 
     private void addFacetFactories() {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/ProgrammingModelServiceDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/ProgrammingModelServiceDefault.java
index a13168c2bc..4487552f3c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/ProgrammingModelServiceDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/ProgrammingModelServiceDefault.java
@@ -61,16 +61,13 @@ implements ProgrammingModelService {
 
     private ProgrammingModel createProgrammingModel() {
 
-        log.info("About to create the ProgrammingModel.");
-
-        val programmingModel = new 
ProgrammingModelFacetsJava11(metaModelContext);
-
         // from all plugins out there, add their contributed FacetFactories, 
Validators
         // and PostProcessors to the programming model
         val metaModelRefiners = 
metaModelContext.getServiceRegistry().select(MetaModelRefiner.class);
-        for (val metaModelRefiner : metaModelRefiners) {
-            metaModelRefiner.refineProgrammingModel(programmingModel);
-        }
+        
+        log.info("About to create the ProgrammingModel w/ {} refiners.", 
metaModelRefiners.size());
+        
+        val programmingModel = new 
ProgrammingModelFacetsJava11(metaModelContext, metaModelRefiners);
 
         // finalize the programming model (make it immutable)
         programmingModel.init(programmingModelInitFilter);
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractTestWithMetaModelContext.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractTestWithMetaModelContext.java
index e19ce41bd7..b81e8bec5f 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractTestWithMetaModelContext.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractTestWithMetaModelContext.java
@@ -25,7 +25,6 @@ import 
org.apache.causeway.core.metamodel.context.HasMetaModelContext;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.progmodel.ProgrammingModelAbstract;
 import 
org.apache.causeway.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
-import 
org.apache.causeway.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava11;
 
 import lombok.Getter;
 import lombok.val;
@@ -43,17 +42,12 @@ implements HasMetaModelContext {
 
     protected final void setupWithDefaultProgrammingModel() {
         metaModelContext = MetaModelContext_forTesting.builder()
-                .programmingModelFactory(mmc->{
-                    val progModel = new ProgrammingModelFacetsJava11(mmc);
-                    progModel.init(new ProgrammingModelInitFilterDefault());
-                    return progModel;
-                })
                 .build();
     }
 
     protected final void setupWithProgrammingModel(final 
BiConsumer<MetaModelContext, ProgrammingModelAbstract> factory) {
         metaModelContext = MetaModelContext_forTesting.builder()
-                .programmingModelFactory(mmc->{
+                .programmingModelFactory((mmc, refiners)->{
                     val progModel = new ProgrammingModelAbstract(mmc) {
                         @Override protected void assertNotInitialized(){}
                     };
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
index 617a8af575..75cd5ccac6 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
@@ -52,7 +52,7 @@ class ViewModelSemanticCheckingFacetFactoryTest {
 
         metaModelContext = MetaModelContext_forTesting.builder()
                 .configuration(configuration)
-                .programmingModelFactory(mmc->new 
ProgrammingModelAbstract(mmc) {})
+                .programmingModelFactory((mmc, refiners)->new 
ProgrammingModelAbstract(mmc) {})
                 .build();
 
         facetFactory = new 
ViewModelSemanticCheckingFacetFactory(metaModelContext);
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
index 4b098a31f2..cca90a69f7 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -39,6 +39,7 @@ import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.DomainService;
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.applib.mixins.system.HasInteractionId;
+import org.apache.causeway.commons.collections.Can;
 import 
org.apache.causeway.core.config.metamodel.facets.DomainObjectConfigOptions;
 import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.causeway.core.metamodel.facetapi.Facet;
@@ -59,13 +60,9 @@ import 
org.apache.causeway.core.metamodel.facets.object.publish.entitychange.Ent
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForDomainObjectAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
-import 
org.apache.causeway.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
-import 
org.apache.causeway.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava11;
 import org.apache.causeway.core.metamodel.spec.IntrospectionState;
 import 
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailures;
 
-import lombok.val;
-
 class DomainObjectAnnotationFacetFactoryTest
 extends FacetFactoryTestAbstract {
 
@@ -682,12 +679,7 @@ extends FacetFactoryTestAbstract {
         @Test
         public void testValidationDomainObjectWithAliasesConfigured() {
             metaModelContext = MetaModelContext_forTesting.builder()
-                    .programmingModelFactory(mmc -> {
-                        val progModel = new ProgrammingModelFacetsJava11(mmc);
-                        facetFactory.refineProgrammingModel(progModel);
-                        progModel.init(new 
ProgrammingModelInitFilterDefault());
-                        return progModel;
-                    })
+                    .refiners(Can.of(__->facetFactory))
                     .build();
             
getConfiguration().getCore().getMetaModel().getValidator().setAllowLogicalTypeNameAsAlias(true);
             facetFactory = new 
DomainObjectAnnotationFacetFactory(getMetaModelContext());
@@ -701,12 +693,7 @@ extends FacetFactoryTestAbstract {
         @Test
         public void testValidationDomainServiceWithAliasesConfigured() {
             metaModelContext = MetaModelContext_forTesting.builder()
-                    .programmingModelFactory(mmc -> {
-                        val progModel = new ProgrammingModelFacetsJava11(mmc);
-                        facetFactory.refineProgrammingModel(progModel);
-                        progModel.init(new 
ProgrammingModelInitFilterDefault());
-                        return progModel;
-                    })
+                    .refiners(Can.of(__->facetFactory))
                     .build();
             
getConfiguration().getCore().getMetaModel().getValidator().setAllowLogicalTypeNameAsAlias(true);
             facetFactory = new 
DomainObjectAnnotationFacetFactory(getMetaModelContext());
@@ -719,12 +706,7 @@ extends FacetFactoryTestAbstract {
         @Test
         public void testValidationDomainObjectWithAliasesDefault() {
             metaModelContext = MetaModelContext_forTesting.builder()
-                    .programmingModelFactory(mmc -> {
-                        val progModel = new ProgrammingModelFacetsJava11(mmc);
-                        facetFactory.refineProgrammingModel(progModel);
-                        progModel.init(new 
ProgrammingModelInitFilterDefault());
-                        return progModel;
-                    })
+                    .refiners(Can.of(__->facetFactory))
                     .build();
             facetFactory = new 
DomainObjectAnnotationFacetFactory(getMetaModelContext());
             ((MetaModelContext_forTesting) 
getMetaModelContext()).getProgrammingModel();//kicks off the programming model 
factory
@@ -737,12 +719,7 @@ extends FacetFactoryTestAbstract {
         @Test
         public void testValidationDomainServiceWithAliasesDefault() {
             metaModelContext = MetaModelContext_forTesting.builder()
-                    .programmingModelFactory(mmc -> {
-                        val progModel = new ProgrammingModelFacetsJava11(mmc);
-                        facetFactory.refineProgrammingModel(progModel);
-                        progModel.init(new 
ProgrammingModelInitFilterDefault());
-                        return progModel;
-                    })
+                    .refiners(Can.of(__->facetFactory))
                     .build();
             facetFactory = new 
DomainObjectAnnotationFacetFactory(getMetaModelContext());
             ((MetaModelContext_forTesting) 
getMetaModelContext()).getProgrammingModel();//kicks off the programming model 
factory
diff --git 
a/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactoryTest_validate.java
 
b/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactoryTest_validate.java
index ad71abbdd9..674b3d881c 100644
--- 
a/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactoryTest_validate.java
+++ 
b/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactoryTest_validate.java
@@ -48,7 +48,7 @@ class JdoVersionAnnotationFacetFactoryTest_validate {
 
         metaModelContext = MetaModelContext_forTesting
         .builder()
-        .programmingModelFactory(mmc->{
+        .programmingModelFactory((mmc, refiners)->{
 
             val programmingModel = new ProgrammingModelAbstract(mmc) {};
 

Reply via email to