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