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())

Reply via email to