This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/spring6 by this push:
new fd0fe1bbaa CAUSEWAY-3690: some performance tweaks for
ViewModelFacetForJavaRecord
fd0fe1bbaa is described below
commit fd0fe1bbaafa4076b2652cea7d14ab995d25285c
Author: Andi Huber <[email protected]>
AuthorDate: Tue Mar 5 11:02:01 2024 +0100
CAUSEWAY-3690: some performance tweaks for ViewModelFacetForJavaRecord
---
.../viewmodel/ViewModelFacetForJavaRecord.java | 24 +++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForJavaRecord.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForJavaRecord.java
index e94b61cca3..ce6c89acea 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForJavaRecord.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForJavaRecord.java
@@ -26,6 +26,7 @@ import java.util.stream.Stream;
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.applib.services.urlencoding.UrlEncodingService;
+import org.apache.causeway.commons.collections.Can;
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;
@@ -55,7 +56,8 @@ extends ViewModelFacetAbstract {
private UrlEncodingService codec;
private SerializingAdapter serializer;
- private Constructor<?> canonicalConstructor;
+
+ private final Constructor<?> canonicalConstructor;
protected ViewModelFacetForJavaRecord(
final Class<?> recordClass,
@@ -84,7 +86,9 @@ extends ViewModelFacetAbstract {
return associationPojo;
}).toArray();
- return
getObjectManager().adapt(canonicalConstructor.newInstance(recordComponentPojos));
+ return ManagedObject.viewmodel(viewmodelSpec,
+ canonicalConstructor.newInstance(recordComponentPojos),
+ Optional.of(bookmark));
}
@Override
@@ -113,11 +117,13 @@ extends ViewModelFacetAbstract {
// -- HELPER
+ private Can<ObjectAssociation> recordComponentsAsAssociations;
private Stream<ObjectAssociation> streamRecordComponents(
final @NonNull ObjectSpecification viewmodelSpec) {
- return
Stream.of(viewmodelSpec.getCorrespondingClass().getRecordComponents())
- .map(RecordComponent::getName)
- .map(memberId->viewmodelSpec.getAssociationElseFail(memberId,
MixedIn.EXCLUDED));
+ if(recordComponentsAsAssociations==null) {
+ this.recordComponentsAsAssociations =
recordComponentsAsAssociations(viewmodelSpec);
+ }
+ return recordComponentsAsAssociations.stream();
}
private void initDependencies() {
@@ -142,6 +148,14 @@ extends ViewModelFacetAbstract {
return _Mementos.parse(codec, serializer, bookmark.getIdentifier());
}
+ private static Can<ObjectAssociation> recordComponentsAsAssociations(
+ final @NonNull ObjectSpecification viewmodelSpec) {
+ return
Arrays.stream(viewmodelSpec.getCorrespondingClass().getRecordComponents())
+ .map(RecordComponent::getName)
+ .map(memberId->viewmodelSpec.getAssociationElseFail(memberId,
MixedIn.EXCLUDED))
+ .collect(Can.toCan());
+ }
+
@SneakyThrows
private static <T> Constructor<T> canonicalConstructor(final @NonNull
Class<T> recordClass) {
val constructorParamTypes =
Arrays.stream(recordClass.getRecordComponents())