This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v3
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v3 by this push:
new a41a0e1f932 CAUSEWAY-2297: FacetProcessor and PostProcessor are
implementation details
a41a0e1f932 is described below
commit a41a0e1f932bcb1151b841819bcf45b102b2ffc9
Author: andi-huber <[email protected]>
AuthorDate: Sun Dec 15 12:32:00 2024 +0100
CAUSEWAY-2297: FacetProcessor and PostProcessor are implementation
details
---
.../causeway/core/metamodel/facetapi/Facet.java | 1 -
.../core/metamodel/facets/FacetFactory.java | 2 +-
.../MandatoryFacetOnParametersDefaultFactory.java | 4 +-
.../MandatoryFacetOnProperyDefaultFactory.java | 4 +-
.../dflt/PropertyValidateFacetDefaultFactory.java | 4 +-
.../methods/MethodFilteringFacetFactory.java | 3 -
.../methods/MethodPrefixBasedFacetFactory.java | 5 -
.../impl}/FacetProcessor.java | 259 +++++++++------------
.../metamodel/spec/impl/FacetedMethodsBuilder.java | 1 -
.../spec/impl/ObjectSpecificationDefault.java | 2 -
.../postprocessor => spec/impl}/PostProcessor.java | 4 +-
.../spec/impl/SpecificationLoaderDefault.java | 11 +-
12 files changed, 118 insertions(+), 182 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java
index 4a9e7121b75..7fe0aeaa423 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java
@@ -26,7 +26,6 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory;
import org.apache.causeway.core.metamodel.facets.FacetedMethod;
import
org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
-import
org.apache.causeway.core.metamodel.specloader.postprocessor.PostProcessor;
public interface Facet
extends
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
index 8faf739c798..0eda0034714 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
@@ -63,7 +63,7 @@ import lombok.RequiredArgsConstructor;
* <p>
* To process a mixin member in the context of it actually being a mixin
* member (for example, authorization or translations), instead use the
- * {@link
org.apache.causeway.core.metamodel.specloader.postprocessor.PostProcessor}
interface.
+ * {@link org.apache.causeway.core.metamodel.spec.impl.PostProcessor}
interface.
* </p>
*/
public interface FacetFactory {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java
index 816454c3418..5020ea409c5 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java
@@ -27,7 +27,7 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import
org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
import
org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
+import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
/**
* Simply installs a {@link MandatoryFacetDefault} onto all properties and
@@ -35,7 +35,7 @@ import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcess
*
* <p>
* The idea is that this {@link FacetFactory} is included early on in the
- * {@link FacetProcessor}, but other {@link MandatoryFacet} implementations
+ * {@link ProgrammingModel}, but other {@link MandatoryFacet} implementations
* which don't require mandatory semantics will potentially replace these where
* the property or parameter is annotated or otherwise indicated as being
* optional.
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java
index 842f0a07c40..8cbe64b7222 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java
@@ -27,7 +27,7 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import
org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
import
org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
+import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
/**
* Simply installs a {@link MandatoryFacetDefault} onto all properties and
@@ -35,7 +35,7 @@ import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcess
*
* <p>
* The idea is that this {@link FacetFactory} is included early on in the
- * {@link FacetProcessor}, but other {@link MandatoryFacet} implementations
+ * {@link ProgrammingModel}, but other {@link MandatoryFacet} implementations
* which don't require mandatory semantics will potentially replace these where
* the property or parameter is annotated or otherwise indicated as being
* optional.
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java
index acf09ca5962..12aa76f24db 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java
@@ -25,14 +25,14 @@ import
org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.FacetFactory;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import
org.apache.causeway.core.metamodel.facets.properties.validating.PropertyValidateFacet;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
+import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
/**
* Simply installs a {@link PropertyValidateFacet} onto all properties.
*
* <p>
* The idea is that this {@link FacetFactory} is included early on in the
- * {@link FacetProcessor}, but other {@link PropertyValidateFacet}
+ * {@link ProgrammingModel}, but other {@link PropertyValidateFacet}
* implementations will potentially replace these where the property is
* annotated or otherwise provides a validation mechanism.
*/
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodFilteringFacetFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodFilteringFacetFactory.java
index e7cd6e5d428..40307d514c9 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodFilteringFacetFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodFilteringFacetFactory.java
@@ -22,12 +22,9 @@ import java.lang.reflect.Method;
import
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.core.metamodel.facets.FacetFactory;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
/**
* A {@link FacetFactory} which filters out arbitrary {@link Method method}s.
- * <p>
- * Used by {@link FacetProcessor#recognizes(ResolvedMethod)}
*/
public interface MethodFilteringFacetFactory extends FacetFactory {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodPrefixBasedFacetFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodPrefixBasedFacetFactory.java
index 6d79eb7c390..d9c3a41abe5 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodPrefixBasedFacetFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodPrefixBasedFacetFactory.java
@@ -19,17 +19,12 @@
package org.apache.causeway.core.metamodel.methods;
import org.apache.causeway.commons.collections.Can;
-import
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.causeway.core.metamodel.facets.FacetFactory;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
/**
* Indicates that the {@link FacetFactory} works by recognizing methods with a
* certain prefix (or prefixes).
- *
- * <p>
- * Used by {@link FacetProcessor#recognizes(ResolvedMethod)}.
*/
public interface MethodPrefixBasedFacetFactory extends FacetFactory,
MetaModelRefiner {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/facetprocessor/FacetProcessor.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java
similarity index 66%
rename from
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/facetprocessor/FacetProcessor.java
rename to
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java
index 626cc510b23..09ee9cf1998 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.core.metamodel.specloader.facetprocessor;
+package org.apache.causeway.core.metamodel.spec.impl;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -29,9 +29,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy;
-import org.apache.causeway.commons.internal.base._Lazy;
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.internal.collections._Maps;
+import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.collections._Multimaps;
import
org.apache.causeway.commons.internal.collections._Multimaps.ListMultimap;
import org.apache.causeway.commons.internal.collections._Sets;
@@ -56,111 +54,83 @@ import
org.apache.causeway.core.metamodel.methods.MethodPrefixBasedFacetFactory;
import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
-import lombok.Getter;
import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-@RequiredArgsConstructor
-public class FacetProcessor
-implements HasMetaModelContext, AutoCloseable{
-
- private final @NonNull ProgrammingModel programmingModel;
-
- @Getter(onMethod_ = {@Override})
- private final @NonNull MetaModelContext metaModelContext;
-
- /**
- * Class<FacetFactory> => FacetFactory
- */
- private final Map<Class<? extends FacetFactory>, FacetFactory>
factoryByFactoryType = _Maps.newHashMap();
-
- /**
- * {@link FacetFactory Facet factories}, in order they were
- * {@link #registerFactory(FacetFactory) registered}.
- */
- private final List<FacetFactory> factories = _Lists.newArrayList();
-
- /**
- * All method prefixes to check in {@link #recognizes(Method)}.
- *
- * <p>
- * Derived from factories that implement
- * {@link MethodPrefixBasedFacetFactory}.
- *
- */
- private final _Lazy<Set<String>> methodPrefixes =
- _Lazy.threadSafe(this::init_methodPrefixes);
-
- /**
- * All registered {@link FacetFactory factories} that implement
- * {@link MethodFilteringFacetFactory}.
- *
- * <p>
- * Used within {@link #recognizes(Method)}.
- *
- */
- private final _Lazy<List<MethodFilteringFacetFactory>>
methodFilteringFactories =
- _Lazy.threadSafe(this::init_methodFilteringFactories);
-
- /**
- * {@link FacetFactory factories} that implement {@link
AccessorFacetFactory}
- * and support properties.
- * <p>
- * Used within {@link #recognizes(Method)}.
- */
- private final _Lazy<List<AccessorFacetFactory>> propertyAccessorFactories =
- _Lazy.threadSafe(this::init_propertyIdentifyingFactories);
-
- /**
- * {@link FacetFactory factories} that implement {@link
AccessorFacetFactory}
- * and support collections.
- * <p>
- * Used within {@link #recognizes(Method)}.
- */
- private final _Lazy<List<AccessorFacetFactory>>
collectionAccessorFactories =
- _Lazy.threadSafe(this::init_collectionIdentifyingFactories);
-
- /**
- * ObjectFeatureType => List<FacetFactory>
- *
- * <p>
- * Lazily initialized, then cached. The lists remain in the same order that
- * the factories were {@link #registerFactory(FacetFactory) registered}.
- */
- private final _Lazy<ListMultimap<FeatureType, FacetFactory>>
factoryListByFeatureType =
- _Lazy.threadSafe(this::init_factoriesByFeatureType);
-
- // -- LIFECYCLE
-
- public void init() {
- cleanUp();
- programmingModel.streamFactories()
- .forEach(this::registerFactory);
- }
-
- @Override
- public void close() {
- cleanUp();
+record FacetProcessor(
+ ProgrammingModel programmingModel,
+ /**
+ * {@link FacetFactory Facet factories}, in order as provided by the
ProgrammingModel.
+ */
+ Can<FacetFactory> factories,
+ /**
+ * Class<FacetFactory> => FacetFactory
+ */
+ Map<Class<? extends FacetFactory>, FacetFactory> factoryByFactoryType,
+ /**
+ * <pre>ObjectFeatureType => List of FacetFactory</pre>
+ * <p>
+ * The lists remain in the same order as the order in
+ * {@link #factories}.
+ */
+ ListMultimap<FeatureType, FacetFactory> factoriesByFeatureType,
+ /**
+ * All method prefixes to check in {@link #recognizes(Method)}.
+ * <p>
+ * Derived from factories that implement
+ * {@link MethodPrefixBasedFacetFactory}.
+ */
+ Set<String> methodPrefixes,
+ /**
+ * All registered {@link FacetFactory factories} that implement
+ * {@link MethodFilteringFacetFactory}.
+ */
+ List<MethodFilteringFacetFactory> methodFilteringFactories,
+ /**
+ * {@link FacetFactory factories} that implement {@link
AccessorFacetFactory}
+ * and support properties.
+ */
+ List<AccessorFacetFactory> propertyAccessorFactories,
+ /**
+ * {@link FacetFactory factories} that implement {@link
AccessorFacetFactory}
+ * and support collections.
+ */
+ List<AccessorFacetFactory> collectionAccessorFactories,
+ List<ObjectTypeFacetFactory> objectSpecIfFacetFactoryList
+ )
+implements HasMetaModelContext {
+
+ public FacetProcessor(
+ @NonNull final ProgrammingModel programmingModel) {
+ this(programmingModel, programmingModel.streamFactories()
+
.map(programmingModel.getMetaModelContext().getServiceInjector()::injectServicesInto)
+ .collect(Can.toCan()));
}
- private void cleanUp() {
- clearCaches();
- factories.clear();
- factoryByFactoryType.clear();
+ private FacetProcessor(
+ final ProgrammingModel programmingModel,
+ final Can<FacetFactory> factories) {
+ this(programmingModel, factories,
factories.toMap(FacetFactory::getClass), factoriesByFeatureType(factories));
}
- private void registerFactory(final FacetFactory factory) {
- factoryByFactoryType.put(factory.getClass(), factory);
- factories.add(factory);
- injectDependenciesInto(factory);
+ private FacetProcessor(
+ final ProgrammingModel programmingModel,
+ final Can<FacetFactory> factories,
+ final Map<Class<? extends FacetFactory>, FacetFactory>
factoryByFactoryType,
+ final ListMultimap<FeatureType, FacetFactory>
factoriesByFeatureType) {
+ this(programmingModel,
+ factories,
+ factoryByFactoryType,
+ factoriesByFeatureType,
+ methodPrefixes(factories),
+ methodFilteringFactories(factories),
+ propertyAccessorFactories(factories),
+ collectionAccessorFactories(factories),
+ objectSpecIfFacetFactoryList(factoriesByFeatureType,
factories));
}
- /**
- * This is <tt>public</tt> so that can be used for <tt>@Facets</tt>
- * processing.
- */
- public void injectDependenciesInto(final FacetFactory factory) {
- metaModelContext.getServiceInjector().injectServicesInto(factory);
+ @Override
+ public MetaModelContext getMetaModelContext() {
+ return programmingModel.getMetaModelContext();
}
/**
@@ -175,13 +145,13 @@ implements HasMetaModelContext, AutoCloseable{
final Consumer<ResolvedMethod> onCandidate) {
methodStream.forEach(method->{
- for (var facetFactory : propertyAccessorFactories.get()) {
+ for (var facetFactory : propertyAccessorFactories) {
if (facetFactory.isAssociationAccessor(method)) {
onCandidate.accept(method);
return; // first wins
}
}
- for (var facetFactory : collectionAccessorFactories.get()) {
+ for (var facetFactory : collectionAccessorFactories) {
if (facetFactory.isAssociationAccessor(method)) {
onCandidate.accept(method);
return; // first wins
@@ -198,7 +168,7 @@ implements HasMetaModelContext, AutoCloseable{
public List<ResolvedMethod> findAndRemovePropertyAccessors(
final MethodRemover methodRemover) {
var propertyAccessors = new ArrayList<ResolvedMethod>();
- for (var facetFactory : propertyAccessorFactories.get()) {
+ for (var facetFactory : propertyAccessorFactories) {
methodRemover.removeMethods(facetFactory::isAssociationAccessor,
propertyAccessors::add);
}
return propertyAccessors;
@@ -212,7 +182,7 @@ implements HasMetaModelContext, AutoCloseable{
public List<ResolvedMethod> findAndRemoveCollectionAccessors(
final MethodRemover methodRemover) {
var collectionAccessors = new ArrayList<ResolvedMethod>();
- for (var facetFactory : collectionAccessorFactories.get()) {
+ for (var facetFactory : collectionAccessorFactories) {
methodRemover.removeMethods(facetFactory::isAssociationAccessor,
collectionAccessors::add);
}
return collectionAccessors;
@@ -236,40 +206,21 @@ implements HasMetaModelContext, AutoCloseable{
*/
public boolean recognizes(final ResolvedMethod method) {
var methodName = method.name();
- for (var prefix : methodPrefixes.get()) {
+ for (var prefix : methodPrefixes) {
if (methodName.startsWith(prefix)) return true;
}
- for (var factory : methodFilteringFactories.get()) {
+ for (var factory : methodFilteringFactories) {
if (factory.recognizes(method)) return true;
}
return false;
}
public void processObjectType(final Class<?> cls, final FacetHolder
facetHolder) {
- var factoryList = getObjectSpecIfFacetFactoryList();
- for (var facetFactory : factoryList) {
+ for (var facetFactory : objectSpecIfFacetFactoryList()) {
facetFactory.process(new ProcessObjectTypeContext(cls,
facetHolder));
}
}
- private List<ObjectTypeFacetFactory> objectSpecIfFacetFactoryList = null;
-
- private List<ObjectTypeFacetFactory> getObjectSpecIfFacetFactoryList() {
- if(objectSpecIfFacetFactoryList == null) {
- var facetFactories = _Lists.<ObjectTypeFacetFactory>newArrayList();
-
- factoryListByFeatureType.get().getOrElseEmpty(FeatureType.OBJECT)
- .forEach(facetFactory->{
- if (facetFactory instanceof ObjectTypeFacetFactory) {
- facetFactories.add((ObjectTypeFacetFactory) facetFactory);
- }
- });
-
- objectSpecIfFacetFactoryList =
Collections.unmodifiableList(facetFactories);
- }
- return objectSpecIfFacetFactoryList;
- }
-
/**
* Attaches all facets applicable to the provided {@link FeatureType#OBJECT
* object}) to the supplied {@link FacetHolder}.
@@ -289,15 +240,14 @@ implements HasMetaModelContext, AutoCloseable{
final IntrospectionPolicy introspectionPolicy,
final MethodRemover methodRemover,
final FacetHolder facetHolder) {
-
var ctx = new ProcessClassContext(
cls,
introspectionPolicy,
removerElseNoopRemover(methodRemover),
facetHolder);
- factoryListByFeatureType.get().getOrElseEmpty(FeatureType.OBJECT)
- .forEach(facetFactory->facetFactory.process(ctx));
+ factoriesByFeatureType.getOrElseEmpty(FeatureType.OBJECT)
+ .forEach(facetFactory->facetFactory.process(ctx));
}
/**
@@ -339,7 +289,7 @@ implements HasMetaModelContext, AutoCloseable{
method,
removerElseNoopRemover(methodRemover), facetedMethod,
isMixinMain);
- for (FacetFactory facetFactory :
factoryListByFeatureType.get().getOrElseEmpty(featureType)) {
+ for (FacetFactory facetFactory :
factoriesByFeatureType.getOrElseEmpty(featureType)) {
facetFactory.process(processMethodContext);
}
}
@@ -374,26 +324,16 @@ implements HasMetaModelContext, AutoCloseable{
new ProcessParameterContext(introspectedClass,
introspectionPolicy,
method, methodRemover, facetedMethodParameter);
- var factoryCache = factoryListByFeatureType.get();
-
FeatureType.PARAMETERS_ONLY.stream()
- .map(factoryCache::getOrElseEmpty)
- .flatMap(List::stream)
- .collect(Collectors.toSet())
-
.forEach(facetFactory->facetFactory.processParams(processParameterContext));
- }
-
- private void clearCaches() {
- factoryListByFeatureType.clear();
- methodPrefixes.clear();
- methodFilteringFactories.clear();
- propertyAccessorFactories.clear();
- collectionAccessorFactories.clear();
+ .map(factoriesByFeatureType::getOrElseEmpty)
+ .flatMap(List::stream)
+ .collect(Collectors.toSet())
+
.forEach(facetFactory->facetFactory.processParams(processParameterContext));
}
// -- INITIALIZERS
- private ListMultimap<FeatureType, FacetFactory>
init_factoriesByFeatureType() {
+ private static ListMultimap<FeatureType, FacetFactory>
factoriesByFeatureType(final Iterable<FacetFactory> factories) {
var factoryListByFeatureType = _Multimaps.<FeatureType,
FacetFactory>newListMultimap();
for (var factory : factories) {
factory.getFeatureTypes().forEach(featureType->
@@ -402,29 +342,27 @@ implements HasMetaModelContext, AutoCloseable{
return factoryListByFeatureType;
}
- private Set<String> init_methodPrefixes() {
+ private static Set<String> methodPrefixes(final Iterable<FacetFactory>
factories) {
var cachedMethodPrefixes = _Sets.<String>newHashSet();
for (var facetFactory : factories) {
- if (facetFactory instanceof MethodPrefixBasedFacetFactory) {
- var methodPrefixBasedFacetFactory =
(MethodPrefixBasedFacetFactory) facetFactory;
+ if (facetFactory instanceof MethodPrefixBasedFacetFactory
methodPrefixBasedFacetFactory) {
methodPrefixBasedFacetFactory.getPrefixes().forEach(cachedMethodPrefixes::add);
}
}
return cachedMethodPrefixes;
}
- private List<MethodFilteringFacetFactory> init_methodFilteringFactories() {
+ private static List<MethodFilteringFacetFactory>
methodFilteringFactories(final Iterable<FacetFactory> factories) {
var methodFilteringFactories = new
ArrayList<MethodFilteringFacetFactory>();
for (var factory : factories) {
- if (factory instanceof MethodFilteringFacetFactory) {
- var methodFilteringFacetFactory =
(MethodFilteringFacetFactory) factory;
+ if (factory instanceof MethodFilteringFacetFactory
methodFilteringFacetFactory) {
methodFilteringFactories.add(methodFilteringFacetFactory);
}
}
return methodFilteringFactories;
}
- private List<AccessorFacetFactory> init_propertyIdentifyingFactories() {
+ private static List<AccessorFacetFactory> propertyAccessorFactories(final
Iterable<FacetFactory> factories) {
var propertyOrCollectionIdentifyingFactories = new
ArrayList<AccessorFacetFactory>();
for (var factory : factories) {
if (factory instanceof AccessorFacetFactory accessorFacetFactory) {
@@ -434,7 +372,7 @@ implements HasMetaModelContext, AutoCloseable{
}
return propertyOrCollectionIdentifyingFactories;
}
- private List<AccessorFacetFactory> init_collectionIdentifyingFactories() {
+ private static List<AccessorFacetFactory>
collectionAccessorFactories(final Iterable<FacetFactory> factories) {
var propertyOrCollectionIdentifyingFactories = new
ArrayList<AccessorFacetFactory>();
for (var factory : factories) {
if (factory instanceof AccessorFacetFactory accessorFacetFactory) {
@@ -445,6 +383,19 @@ implements HasMetaModelContext, AutoCloseable{
return propertyOrCollectionIdentifyingFactories;
}
+ private static List<ObjectTypeFacetFactory> objectSpecIfFacetFactoryList(
+ final ListMultimap<FeatureType, FacetFactory>
factoryListByFeatureType,
+ final Iterable<FacetFactory> factories) {
+ var facetFactories = new ArrayList<ObjectTypeFacetFactory>();
+ factoryListByFeatureType.getOrElseEmpty(FeatureType.OBJECT)
+ .forEach(facetFactory->{
+ if (facetFactory instanceof ObjectTypeFacetFactory
objectTypeFacetFactory) {
+ facetFactories.add(objectTypeFacetFactory);
+ }
+ });
+ return Collections.unmodifiableList(facetFactories);
+ }
+
// -- HELPER
private static MethodRemover removerElseNoopRemover(final MethodRemover
methodRemover) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
index 5525715ed4b..912c311215e 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
@@ -55,7 +55,6 @@ import
org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet;
import
org.apache.causeway.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry;
import
org.apache.causeway.core.metamodel.spec.impl.ObjectSpecificationMutable.IntrospectionState;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
import org.apache.causeway.core.metamodel.specloader.typeextract.TypeExtractor;
import lombok.Getter;
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
index 9d8a7d9bd83..5598b3ccf53 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
@@ -107,8 +107,6 @@ import
org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
-import
org.apache.causeway.core.metamodel.specloader.postprocessor.PostProcessor;
import org.apache.causeway.core.metamodel.spi.EntityTitleSubscriber;
import org.apache.causeway.core.metamodel.util.Facets;
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/postprocessor/PostProcessor.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/PostProcessor.java
similarity index 96%
rename from
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/postprocessor/PostProcessor.java
rename to
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/PostProcessor.java
index f866cb9102c..9b7fcdfe4a8 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/postprocessor/PostProcessor.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/PostProcessor.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.core.metamodel.specloader.postprocessor;
+package org.apache.causeway.core.metamodel.spec.impl;
import org.apache.causeway.commons.collections.Can;
import
org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessor;
@@ -24,7 +24,7 @@ import
org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
-public record PostProcessor(
+record PostProcessor(
ProgrammingModel programmingModel,
Can<MetaModelPostProcessor> enabledPostProcessors) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java
index 16fb22c8815..828cfae02d0 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java
@@ -78,8 +78,6 @@ import
org.apache.causeway.core.metamodel.services.classsubstitutor.ClassSubstit
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
import
org.apache.causeway.core.metamodel.spec.impl.ObjectSpecificationMutable.IntrospectionState;
-import
org.apache.causeway.core.metamodel.specloader.facetprocessor.FacetProcessor;
-import
org.apache.causeway.core.metamodel.specloader.postprocessor.PostProcessor;
import
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
import
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailures;
import
org.apache.causeway.core.metamodel.valuetypes.ValueSemanticsResolverDefault;
@@ -182,8 +180,7 @@ implements
classSubstitutorRegistry);
instance.metaModelContext =
serviceRegistry.lookupServiceElseFail(MetaModelContext.class);
- instance.facetProcessor = new FacetProcessor(programmingModel,
instance.metaModelContext);
- instance.facetProcessor.init();
+ instance.facetProcessor = new FacetProcessor(programmingModel);
instance.postProcessor = enablePostprocessors
? new PostProcessor(programmingModel)
: new PostProcessor(programmingModel, Can.empty()); //
explicitly use empty post processor list
@@ -199,7 +196,7 @@ implements
log.debug("initialising {}", this);
}
this.metaModelContext =
serviceRegistry.lookupServiceElseFail(MetaModelContext.class);
- this.facetProcessor = new FacetProcessor(programmingModel,
metaModelContext);
+ this.facetProcessor = new FacetProcessor(programmingModel);
}
record SpecCollector(
@@ -244,7 +241,7 @@ implements
var stopWatch = _Timing.now();
// initialize subcomponents, only after @PostConstruct has globally
completed
- facetProcessor.init();
+ this.facetProcessor = new FacetProcessor(programmingModel);
this.postProcessor = new PostProcessor(programmingModel);
var specs = new SpecCollector();
@@ -338,7 +335,7 @@ implements
public void shutdown() {
log.debug("shutting down {}", this);
disposeMetaModel();
- facetProcessor.close();
+ facetProcessor = null;
postProcessor = null;
facetProcessor = null;
}