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
commit 9a1f2e6c630e0bd80587088deddfdafacc850010 Author: Andi Huber <[email protected]> AuthorDate: Sat May 14 08:31:58 2022 +0200 ISIS-3051: FacetProcessor optimization - don't run the same processor more than once --- .../specloader/facetprocessor/FacetProcessor.java | 25 ++++++++-------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java index 68650c062f..b475e5fafc 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy; @@ -375,27 +376,19 @@ implements HasMetaModelContext{ final MethodRemover methodRemover, final FacetedMethodParameter facetedMethodParameter) { - for (val featureType : FeatureType.PARAMETERS_ONLY) { - processParams(introspectedClass, introspectionPolicy, method, methodRemover, facetedMethodParameter, featureType); - } - } - - public void processParams( - final Class<?> introspectedClass, - final IntrospectionPolicy introspectionPolicy, - final Method method, - final MethodRemover methodRemover, - final FacetedMethodParameter facetedMethodParameter, - final FeatureType featureType) { - val processParameterContext = - new ProcessParameterContext(introspectedClass, introspectionPolicy, method, methodRemover, facetedMethodParameter); + new ProcessParameterContext(introspectedClass, introspectionPolicy, + method, methodRemover, facetedMethodParameter); - factoryListByFeatureType.get().getOrElseEmpty(featureType) + val 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();
