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


The following commit(s) were added to refs/heads/master by this push:
     new c4b8b91b66 ISIS-3295: simplify PostConstruct method caching (use 
_ClassCache)
c4b8b91b66 is described below

commit c4b8b91b66c3bea8745787a653d661843899c493
Author: Andi Huber <[email protected]>
AuthorDate: Fri Nov 25 10:28:39 2022 +0100

    ISIS-3295: simplify PostConstruct method caching (use _ClassCache)
---
 commons/src/main/java/module-info.java             |  1 +
 .../commons/internal/reflection/_ClassCache.java   | 32 +++++++++++-
 .../facets/HasPostConstructMethodCache.java        | 58 ----------------------
 .../DomainObjectAnnotationFacetFactory.java        | 20 +-------
 .../object/viewmodel/ViewModelFacetAbstract.java   | 18 ++-----
 .../object/viewmodel/ViewModelFacetFactory.java    | 23 ++-------
 .../ViewModelFacetForDomainObjectAnnotation.java   | 12 ++---
 .../ViewModelFacetForSerializableInterface.java    | 11 ++--
 .../ViewModelFacetForViewModelInterface.java       | 11 ++--
 .../ViewModelFacetForXmlRootElementAnnotation.java | 11 ++--
 .../core/metamodel/methods/MethodByClassMap.java   | 30 -----------
 .../dflt/ProgrammingModelFacetsJava11.java         |  7 +--
 .../metamodel/facets/MethodFinderUtilsTest.java    | 39 ++++-----------
 ...oicesFacetFromBoundedAnnotationFactoryTest.java |  3 +-
 .../DomainObjectAnnotationFacetFactoryTest.java    |  3 +-
 .../RecreatableObjectFacetFactoryTest.java         |  3 +-
 16 files changed, 74 insertions(+), 208 deletions(-)

diff --git a/commons/src/main/java/module-info.java 
b/commons/src/main/java/module-info.java
index 2491d567a3..51d62347e4 100644
--- a/commons/src/main/java/module-info.java
+++ b/commons/src/main/java/module-info.java
@@ -72,6 +72,7 @@ module org.apache.causeway.commons {
     requires transitive spring.context;
     requires transitive spring.core;
     requires java.inject;
+    requires java.annotation;
 
     // JAXB JUnit test
     opens org.apache.causeway.commons.internal.resources to java.xml.bind;
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
 
b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
index 773cb2cb7f..181c2ceecd 100644
--- 
a/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
+++ 
b/commons/src/main/java/org/apache/causeway/commons/internal/reflection/_ClassCache.java
@@ -21,12 +21,14 @@ package org.apache.causeway.commons.internal.reflection;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,6 +97,10 @@ public final class _ClassCache implements AutoCloseable {
         return Optional.ofNullable(lookupConstructor(false, type, paramTypes));
     }
 
+    public Stream<Method> streamPostConstructMethods(final Class<?> type) {
+        return inspectType(type).postConstructMethodsByKey.values().stream();
+    }
+
     /**
      * A drop-in replacement for {@link Class#getMethod(String, Class...)} 
that only looks up
      * public methods and does not throw {@link NoSuchMethodException}s.
@@ -177,6 +183,7 @@ public final class _ClassCache implements AutoCloseable {
         private final Map<ConstructorKey, Constructor<?>> 
publicConstructorsByKey = new HashMap<>();
         //private final Map<ConstructorKey, Constructor<?>> 
nonPublicDeclaredConstructorsByKey = new HashMap<>();
         private final Map<MethodKey, Method> publicMethodsByKey = new 
HashMap<>();
+        private final Map<MethodKey, Method> postConstructMethodsByKey = new 
HashMap<>();
         private final Map<MethodKey, Method> nonPublicDeclaredMethodsByKey = 
new HashMap<>();
         private final Map<String, Can<Method>> declaredMethodsByAttribute = 
new HashMap<>();
     }
@@ -231,11 +238,22 @@ public final class _ClassCache implements AutoCloseable {
                     model.publicConstructorsByKey.put(ConstructorKey.of(type, 
constr), constr);
                 }
 
+                // process all public and non-public
                 for(val method : declaredMethods) {
-                    model.nonPublicDeclaredMethodsByKey.put(MethodKey.of(type, 
method), method);
+                    if(Modifier.isStatic(method.getModifiers())) continue;
+
+                    val key = MethodKey.of(type, method);
+                    // add all now, remove public ones later
+                    model.nonPublicDeclaredMethodsByKey.put(key, method);
+                    // collect post-construct methods
+                    if(isPostConstruct(method)) {
+                        model.postConstructMethodsByKey.put(key, method);
+                    }
                 }
 
                 for(val method : type.getMethods()) {
+                    if(Modifier.isStatic(method.getModifiers())) continue;
+
                     val key = MethodKey.of(type, method);
                     model.publicMethodsByKey.put(key, method);
                     model.nonPublicDeclaredMethodsByKey.remove(key);
@@ -247,6 +265,18 @@ public final class _ClassCache implements AutoCloseable {
         }
     }
 
+    /**
+     * return-type: void
+     * signature: no args
+     * access: public and non-public
+     */
+    private boolean isPostConstruct(final Method method) {
+        return void.class.equals(method.getReturnType())
+                && method.getParameterCount()==0
+                ? _Annotations.synthesize(method, 
PostConstruct.class).isPresent()
+                : false;
+    }
+
     private Constructor<?> lookupConstructor(
             final boolean includeDeclaredConstructors,
             final Class<?> type,
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasPostConstructMethodCache.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasPostConstructMethodCache.java
deleted file mode 100644
index 0fe78cb2c5..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasPostConstructMethodCache.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.facets;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import javax.annotation.PostConstruct;
-
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
-import org.apache.causeway.core.metamodel.methods.MethodFinder;
-
-import lombok.val;
-
-/**
- * Contract between implementations of RecreatableObjectFacet and their 
creating facet factories.
- */
-public interface HasPostConstructMethodCache {
-
-    MethodByClassMap getPostConstructMethodsCache();
-
-    default Method postConstructMethodFor(final Class<?> domainObjectClass) {
-        return findAnnotatedMethod(
-                // @PostConstruct is allowed to appear on non-public methods
-                MethodFinder.notNecessarilyPublic(domainObjectClass, 
MethodFinder.ANY_NAME)
-                .withRequiredReturnType(void.class),
-                PostConstruct.class,
-                getPostConstructMethodsCache());
-    }
-
-    private static Method findAnnotatedMethod(
-            final MethodFinder finder,
-            final Class<? extends Annotation> annotationClass,
-            final MethodByClassMap methods) {
-
-        val type = finder.getCorrespondingClass();
-        return methods.computeIfAbsent(type, 
__->finder.streamMethodsIgnoringSignature()
-                        
.filter(method->method.getAnnotation(annotationClass)!=null)
-                        .findFirst()).orElse(null);
-    }
-
-}
\ No newline at end of file
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index b261e0835a..43712fb781 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -55,7 +55,6 @@ import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import org.apache.causeway.core.metamodel.facets.ObjectTypeFacetFactory;
 import 
org.apache.causeway.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacetForDomainObjectAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacetForDomainObjectAnnotation;
@@ -76,7 +75,6 @@ import 
org.apache.causeway.core.metamodel.facets.object.domainobject.introspecti
 import 
org.apache.causeway.core.metamodel.facets.object.mixin.MetaModelValidatorForMixinTypes;
 import 
org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacetForDomainObjectAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForDomainObjectAnnotation;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import 
org.apache.causeway.core.metamodel.specloader.validator.MetaModelVisitingValidatorAbstract;
@@ -85,8 +83,6 @@ import org.apache.causeway.core.metamodel.util.EventUtil;
 
 import static org.apache.causeway.commons.internal.base._NullSafe.stream;
 
-import lombok.Getter;
-import lombok.NonNull;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -95,7 +91,6 @@ public class DomainObjectAnnotationFacetFactory
 extends FacetFactoryAbstract
 implements
     MetaModelRefiner,
-    HasPostConstructMethodCache,
     ObjectTypeFacetFactory {
 
     private final MetaModelValidatorForMixinTypes mixinTypeValidator =
@@ -103,10 +98,8 @@ implements
 
     @Inject
     public DomainObjectAnnotationFacetFactory(
-            final MetaModelContext mmc,
-            final MethodByClassMap postConstructMethodsCache) {
+            final MetaModelContext mmc) {
         super(mmc, FeatureType.OBJECTS_ONLY);
-        this.postConstructMethodsCache = postConstructMethodsCache;
     }
 
     @Override
@@ -343,15 +336,12 @@ implements
             return;
         }
 
-        val postConstructMethodCache = this;
-
         // handle with least priority
         if(addFacetIfPresent(
                 ViewModelFacetForDomainObjectAnnotation
                 .create(
                         domainObjectIfAny,
-                        facetHolder,
-                        postConstructMethodCache))
+                        facetHolder))
                 .isPresent()) {
             return;
         }
@@ -643,10 +633,4 @@ implements
             });
     }
 
-
-    // //////////////////////////////////////
-
-    @Getter(onMethod_ = {@Override})
-    private final @NonNull MethodByClassMap postConstructMethodsCache;
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetAbstract.java
index ddc2b2e157..bbde9a2142 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetAbstract.java
@@ -18,19 +18,18 @@
  */
 package org.apache.causeway.core.metamodel.facets.object.viewmodel;
 
-import java.lang.reflect.Method;
 import java.util.Optional;
 
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.commons.internal.base._Strings;
+import org.apache.causeway.commons.internal.reflection._ClassCache;
 import org.apache.causeway.core.metamodel.commons.CanonicalInvoker;
 import org.apache.causeway.core.metamodel.commons.ClassExtensions;
 import org.apache.causeway.core.metamodel.facetapi.Facet;
 import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
@@ -41,25 +40,19 @@ public abstract class ViewModelFacetAbstract
 extends FacetAbstract
 implements ViewModelFacet {
 
-    private final HasPostConstructMethodCache postConstructMethodCache;
-
     private static final Class<? extends Facet> type() {
         return ViewModelFacet.class;
     }
 
     protected ViewModelFacetAbstract(
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder holder) {
         super(type(), holder);
-        this.postConstructMethodCache = postConstructMethodCache;
     }
 
     protected ViewModelFacetAbstract(
             final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache,
             final Facet.Precedence precedence) {
         super(type(), holder, precedence);
-        this.postConstructMethodCache = postConstructMethodCache;
     }
 
     @Override
@@ -103,10 +96,9 @@ implements ViewModelFacet {
             @NonNull Bookmark bookmark);
 
     private void invokePostConstructMethod(final Object viewModel) {
-        final Method postConstructMethod = 
postConstructMethodCache.postConstructMethodFor(viewModel.getClass());
-        if (postConstructMethod != null) {
-            CanonicalInvoker.invoke(postConstructMethod, viewModel);
-        }
+        
_ClassCache.getInstance().streamPostConstructMethods(viewModel.getClass())
+        .forEach(postConstructMethod->
+            CanonicalInvoker.invoke(postConstructMethod, viewModel));
     }
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
index 65f78bee44..e5c4623225 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java
@@ -29,27 +29,20 @@ import 
org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
 import 
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
 
-import lombok.Getter;
-import lombok.NonNull;
 import lombok.val;
 
 public class ViewModelFacetFactory
 extends FacetFactoryAbstract
 implements
-    MetaModelRefiner,
-    HasPostConstructMethodCache {
+    MetaModelRefiner {
 
     @Inject
     public ViewModelFacetFactory(
-            final MetaModelContext mmc,
-            final MethodByClassMap postConstructMethodsCache) {
+            final MetaModelContext mmc) {
         super(mmc, FeatureType.OBJECTS_ONLY);
-        this.postConstructMethodsCache = postConstructMethodsCache;
     }
 
     /**
@@ -63,22 +56,21 @@ implements
 
         val facetHolder = processClassContext.getFacetHolder();
         val type = processClassContext.getCls();
-        val postConstructMethodCache = this;
 
         // XmlRootElement annotation (with default precedence)
         val xmlRootElementIfAny = 
processClassContext.synthesizeOnType(XmlRootElement.class);
         FacetUtil
         .addFacetIfPresent(
                 ViewModelFacetForXmlRootElementAnnotation
-                .create(xmlRootElementIfAny, facetHolder, 
postConstructMethodCache));
+                .create(xmlRootElementIfAny, facetHolder));
 
         // (with high precedence)
         FacetUtil
         .addFacetIfPresent(
             // either ViewModel interface (highest precedence)
-            ViewModelFacetForViewModelInterface.create(type, facetHolder, 
postConstructMethodCache)
+            ViewModelFacetForViewModelInterface.create(type, facetHolder)
             // or Serializable interface (if any)
-            .or(()->ViewModelFacetForSerializableInterface.create(type, 
facetHolder, postConstructMethodCache)));
+            .or(()->ViewModelFacetForSerializableInterface.create(type, 
facetHolder)));
 
         // DomainObject(nature=VIEW_MODEL) is managed by the 
DomainObjectAnnotationFacetFactory as a fallback strategy
     }
@@ -116,9 +108,4 @@ implements
         });
     }
 
-    // //////////////////////////////////////
-
-    @Getter(onMethod_ = {@Override})
-    private final @NonNull MethodByClassMap postConstructMethodsCache;
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
index 267b59c5f4..e1dc96abf0 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
@@ -31,7 +31,6 @@ import org.apache.causeway.commons.internal.memento._Mementos;
 import 
org.apache.causeway.commons.internal.memento._Mementos.SerializingAdapter;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import 
org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -46,8 +45,7 @@ extends ViewModelFacetAbstract {
 
     public static Optional<ViewModelFacetForDomainObjectAnnotation> create(
             final Optional<DomainObject> domainObjectIfAny,
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder holder) {
 
         return domainObjectIfAny
                 .map(DomainObject::nature)
@@ -73,8 +71,7 @@ extends ViewModelFacetAbstract {
                         }
                         // else fall through
                     case VIEW_MODEL:
-                        return new ViewModelFacetForDomainObjectAnnotation(
-                                holder, postConstructMethodCache);
+                        return new 
ViewModelFacetForDomainObjectAnnotation(holder);
                     }
                     // shouldn't happen, the above switch should match all 
cases
                     throw new IllegalArgumentException("nature of '" + nature 
+ "' not recognized");
@@ -86,10 +83,9 @@ extends ViewModelFacetAbstract {
     private SerializingAdapter serializer;
 
     protected ViewModelFacetForDomainObjectAnnotation(
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder holder) {
         // is overruled by any other ViewModelFacet type
-        super(holder, postConstructMethodCache, Precedence.LOW);
+        super(holder, Precedence.LOW);
     }
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
index 2ea28f3aa9..b0dcf7a6e1 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForSerializableInterface.java
@@ -30,7 +30,6 @@ import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.commons.internal.base._Bytes;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
@@ -46,18 +45,16 @@ extends ViewModelFacetAbstract {
 
     public static Optional<ViewModelFacet> create(
             final Class<?> cls,
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder holder) {
 
         return Serializable.class.isAssignableFrom(cls)
-                ? Optional.of(new 
ViewModelFacetForSerializableInterface(holder, postConstructMethodCache))
+                ? Optional.of(new 
ViewModelFacetForSerializableInterface(holder))
                 : Optional.empty();
     }
 
     protected ViewModelFacetForSerializableInterface(
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
-        super(holder, postConstructMethodCache, Precedence.HIGH);
+            final FacetHolder holder) {
+        super(holder, Precedence.HIGH);
     }
 
     @SneakyThrows
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
index cb7bebce29..8d45c6d186 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
@@ -34,7 +34,6 @@ import 
org.apache.causeway.commons.internal.assertions._Assert;
 import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
 import org.apache.causeway.core.metamodel.commons.ClassExtensions;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import 
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;
@@ -52,8 +51,7 @@ extends ViewModelFacetAbstract {
 
     public static <T> Optional<ViewModelFacet> create(
             final Class<T> cls,
-            final FacetHolder holder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder holder) {
 
         if(!ViewModel.class.isAssignableFrom(cls)) {
             return Optional.empty();
@@ -109,16 +107,15 @@ extends ViewModelFacetAbstract {
 
         }
 
-        return Optional.of(new ViewModelFacetForViewModelInterface(holder, 
pickedConstructor, postConstructMethodCache));
+        return Optional.of(new ViewModelFacetForViewModelInterface(holder, 
pickedConstructor));
     }
 
     private Constructor<?> constructorAnyArgs;
 
     protected ViewModelFacetForViewModelInterface(
             final FacetHolder holder,
-            final @Nullable Constructor<?> constructorAnyArgs,
-            final HasPostConstructMethodCache postConstructMethodCache) {
-        super(holder, postConstructMethodCache,  Precedence.HIGH);
+            final @Nullable Constructor<?> constructorAnyArgs) {
+        super(holder, Precedence.HIGH);
         this.constructorAnyArgs = constructorAnyArgs;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
index 0f2f5e0b63..5d62ff4ac4 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
@@ -28,7 +28,6 @@ import 
org.apache.causeway.applib.services.urlencoding.UrlEncodingService;
 import org.apache.causeway.commons.internal.debug._Debug;
 import org.apache.causeway.commons.internal.debug.xray.XrayUi;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facets.HasPostConstructMethodCache;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
@@ -41,19 +40,17 @@ extends ViewModelFacetAbstract {
 
     public static Optional<ViewModelFacet> create(
             final Optional<XmlRootElement> xmlRootElementIfAny,
-            final FacetHolder facetHolder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder facetHolder) {
 
         return xmlRootElementIfAny.map(xmlRootElement->
             new ViewModelFacetForXmlRootElementAnnotation(
-                    facetHolder, postConstructMethodCache));
+                    facetHolder));
     }
 
     private ViewModelFacetForXmlRootElementAnnotation(
-            final FacetHolder facetHolder,
-            final HasPostConstructMethodCache postConstructMethodCache) {
+            final FacetHolder facetHolder) {
         // overruled by other non fallback ViewModelFacet types
-        super(facetHolder, postConstructMethodCache, Precedence.DEFAULT);
+        super(facetHolder, Precedence.DEFAULT);
     }
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodByClassMap.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodByClassMap.java
deleted file mode 100644
index 5cae334874..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/methods/MethodByClassMap.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.methods;
-
-import java.lang.reflect.Method;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-
-public final class MethodByClassMap
-extends ConcurrentHashMap<Class<?>, Optional<Method>> {
-
-    private static final long serialVersionUID = 1L;
-
-}
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 c519a25363..6f8da5f003 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
@@ -83,7 +83,6 @@ import 
org.apache.causeway.core.metamodel.facets.properties.validating.dflt.Prop
 import 
org.apache.causeway.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethodFactory;
 import 
org.apache.causeway.core.metamodel.facets.value.semantics.ValueSemanticsAnnotationFacetFactory;
 import 
org.apache.causeway.core.metamodel.methods.DomainIncludeAnnotationEnforcesMetamodelContributionValidator;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 import 
org.apache.causeway.core.metamodel.postprocessors.all.DescribedAsFromTypePostProcessor;
 import 
org.apache.causeway.core.metamodel.postprocessors.all.i18n.SynthesizeObjectNamingPostProcessor;
 import 
org.apache.causeway.core.metamodel.postprocessors.all.i18n.TranslationPostProcessor;
@@ -182,13 +181,11 @@ extends ProgrammingModelAbstract {
         // must come after CssClassFacetOnMemberFactory
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
CssClassFacetOnActionFromConfiguredRegexFactory(mmc));
 
-        val postConstructMethodsCache = new MethodByClassMap();
-
-        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
ViewModelFacetFactory(mmc, postConstructMethodsCache));
+        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
ViewModelFacetFactory(mmc));
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
JaxbFacetFactory(mmc));
 
         // must come after RecreatableObjectFacetFactory
-        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
DomainObjectAnnotationFacetFactory(mmc, postConstructMethodsCache));
+        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
DomainObjectAnnotationFacetFactory(mmc));
 
         // must come after the property/collection accessor+mutator facet 
factories
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new 
ActionAnnotationFacetFactory(mmc));
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/MethodFinderUtilsTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/MethodFinderUtilsTest.java
index 692b527111..f1892e8bf4 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/MethodFinderUtilsTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/MethodFinderUtilsTest.java
@@ -18,19 +18,14 @@
  */
 package org.apache.causeway.core.metamodel.facets;
 
-import java.lang.reflect.Method;
-import java.util.Optional;
-
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.causeway.commons.internal.reflection._ClassCache;
 import org.apache.causeway.core.metamodel._testing._TestDummies;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 
 import lombok.val;
 
@@ -40,38 +35,22 @@ class MethodFinderUtilsTest {
         public void thisDoesNotHaveAnyAnnotation(){}
     }
 
-    private HasPostConstructMethodCache hasPostConstructMethodCache;
-
     @BeforeEach
     public void setup() {
-        val methodByClassMap = new MethodByClassMap();
-        this.hasPostConstructMethodCache = () -> methodByClassMap;
     }
 
     @Test
     public void whenExists() throws Exception {
-
-        val cache = hasPostConstructMethodCache.getPostConstructMethodsCache();
-        val method = 
hasPostConstructMethodCache.postConstructMethodFor(_TestDummies.WithPostConstruct.class);
-
-        assertThat(method, is(not(nullValue())));
-        final Optional<Method> actual = 
cache.get(_TestDummies.WithPostConstruct.class);
-        assertThat(actual, is(not(nullValue())));
-        assertThat(actual.isPresent(), is(true));
-        assertThat(actual.orElse(null), is(method));
+        val methodIfAny = 
_ClassCache.getInstance().streamPostConstructMethods(_TestDummies.WithPostConstruct.class)
+                .findFirst();
+        assertTrue(methodIfAny.isPresent());
     }
 
     @Test
     public void whenDoesNotExist() throws Exception {
-
-        val cache = hasPostConstructMethodCache.getPostConstructMethodsCache();
-        val method = 
hasPostConstructMethodCache.postConstructMethodFor(NoPostConstruct.class);
-
-        assertThat(method, is(nullValue()));
-        final Optional<Method> actual = cache.get(NoPostConstruct.class);
-        assertThat(actual, is(not(nullValue())));
-        assertThat(actual.isPresent(), is(false));
-        assertThat(actual.orElse(null), is(nullValue()));
+        val methodIfAny = 
_ClassCache.getInstance().streamPostConstructMethods(NoPostConstruct.class)
+                .findFirst();
+        assertFalse(methodIfAny.isPresent());
     }
 
 }
\ No newline at end of file
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
index 4ee618dc5e..c7275bbc0e 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
@@ -28,7 +28,6 @@ import 
org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest;
 import 
org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import 
org.apache.causeway.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
 import 
org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 
 import lombok.val;
 
@@ -41,7 +40,7 @@ extends AbstractFacetFactoryTest {
     protected void setUp() throws Exception {
         super.setUp();
 
-        facetFactory = new 
DomainObjectAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
+        facetFactory = new 
DomainObjectAnnotationFacetFactory(metaModelContext);
     }
 
     @Override
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 e59c9f818f..1bf882baba 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
@@ -58,7 +58,6 @@ 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.methods.MethodByClassMap;
 
 import lombok.val;
 
@@ -69,7 +68,7 @@ extends AbstractFacetFactoryJupiterTestCase {
 
     @BeforeEach
     void setUp() throws Exception {
-        facetFactory = new 
DomainObjectAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
+        facetFactory = new 
DomainObjectAnnotationFacetFactory(metaModelContext);
     }
 
     @AfterEach
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
index dc909ffe51..c1662be3a5 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
@@ -28,7 +28,6 @@ import 
org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContex
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetFactory;
 import 
org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForViewModelInterface;
-import org.apache.causeway.core.metamodel.methods.MethodByClassMap;
 
 class RecreatableObjectFacetFactoryTest
 extends AbstractFacetFactoryTest {
@@ -39,7 +38,7 @@ extends AbstractFacetFactoryTest {
     protected void setUp() throws Exception {
         super.setUp();
 
-        facetFactory = new ViewModelFacetFactory(metaModelContext, new 
MethodByClassMap());
+        facetFactory = new ViewModelFacetFactory(metaModelContext);
     }
 
     @Override


Reply via email to