You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/08/28 05:42:50 UTC

[isis] branch master updated: ISIS-2774: memoize expensive isExplicitlyAnnotated with members

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 05ebaee  ISIS-2774: memoize expensive isExplicitlyAnnotated with members
05ebaee is described below

commit 05ebaee8704cc94bc7c6e1cc7abe82e0ca5ab217
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Aug 28 07:42:41 2021 +0200

    ISIS-2774: memoize expensive isExplicitlyAnnotated with members
---
 .../specloader/specimpl/ObjectActionDefault.java       | 16 +++++++++-------
 .../specloader/specimpl/ObjectActionMixedIn.java       | 13 ++++++++-----
 .../specimpl/OneToManyAssociationDefault.java          | 18 +++++++++++-------
 .../specimpl/OneToManyAssociationMixedIn.java          | 13 ++++++++-----
 .../specimpl/OneToOneAssociationDefault.java           | 18 +++++++++++-------
 .../specimpl/OneToOneAssociationMixedIn.java           | 13 ++++++++-----
 6 files changed, 55 insertions(+), 36 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 73b83bf..b9d7bb9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -68,6 +68,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.schema.cmd.v2.CommandDto;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.val;
 
@@ -528,13 +529,8 @@ implements ObjectAction {
         return getType().isPrototype();
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
-        val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Action.class).isPresent()
-                || _Annotations.synthesize(javaMethod, ActionLayout.class).isPresent();
-    }
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
 
     /**
      * Internal API, called by the various implementations of
@@ -590,4 +586,10 @@ implements ObjectAction {
                 .asCommandDto(interactionId, Can.ofSingleton(head), this, argumentAdapters);
     }
 
+    private boolean calculateIsExplicitlyAnnotated() {
+        val javaMethod = getFacetedMethod().getMethod();
+        return _Annotations.synthesize(javaMethod, Action.class).isPresent()
+                || _Annotations.synthesize(javaMethod, ActionLayout.class).isPresent();
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 1c6c125..305d28f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -175,12 +175,15 @@ implements MixedInMember {
         return getSpecificationLoader().loadSpecification(mixinType);
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
+
+    // -- HELPER
+
+    private boolean calculateIsExplicitlyAnnotated() {
         val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent()
-                || super.isExplicitlyAnnotated();
+        return super.isExplicitlyAnnotated() // legacy programming style
+                || _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index 19035f4..b5b2bcb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
+import lombok.Getter;
 import lombok.val;
 
 public class OneToManyAssociationDefault
@@ -169,13 +170,8 @@ implements OneToManyAssociation {
         return 0; // n/a
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
-        val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Collection.class).isPresent()
-                || _Annotations.synthesize(javaMethod, CollectionLayout.class).isPresent();
-    }
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
 
     // -- toString
 
@@ -188,5 +184,13 @@ implements OneToManyAssociation {
         return str.toString();
     }
 
+    // -- HELPER
+
+    private boolean calculateIsExplicitlyAnnotated() {
+        val javaMethod = getFacetedMethod().getMethod();
+        return _Annotations.synthesize(javaMethod, Collection.class).isPresent()
+                || _Annotations.synthesize(javaMethod, CollectionLayout.class).isPresent();
+    }
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index 830fc5c..0462d75 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -174,12 +174,15 @@ implements MixedInMember {
         return this.mixinAction == mixinAction;
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
+
+    // -- HELPER
+
+    private boolean calculateIsExplicitlyAnnotated() {
         val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent()
-                || super.isExplicitlyAnnotated();
+        return super.isExplicitlyAnnotated() // legacy programming style
+                || _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent();
     }
 
     private ExecutionPublisher getPublishingServiceInternal() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index b3c990a..ac7e30c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -56,6 +56,7 @@ import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
+import lombok.Getter;
 import lombok.val;
 
 public class OneToOneAssociationDefault
@@ -315,13 +316,8 @@ implements OneToOneAssociation {
                 .asCommandDto(interactionId, Can.ofSingleton(head), this, valueAdapterOrNull));
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
-        val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Property.class).isPresent()
-                || _Annotations.synthesize(javaMethod, PropertyLayout.class).isPresent();
-    }
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
 
     // -- OBJECT CONTRACT
 
@@ -335,5 +331,13 @@ implements OneToOneAssociation {
         return str.toString();
     }
 
+    // -- HELPER
+
+    private boolean calculateIsExplicitlyAnnotated() {
+        val javaMethod = getFacetedMethod().getMethod();
+        return _Annotations.synthesize(javaMethod, Property.class).isPresent()
+                || _Annotations.synthesize(javaMethod, PropertyLayout.class).isPresent();
+    }
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 0ecd069..1c7acf8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -159,12 +159,15 @@ implements MixedInMember {
         return this.mixinAction == mixinAction;
     }
 
-    @Override
-    public boolean isExplicitlyAnnotated() {
-        //FIXME[ISIS-2774] memoize or even better, make this a final field
+    @Getter(lazy=true, onMethod_ = {@Override})
+    private final boolean explicitlyAnnotated = calculateIsExplicitlyAnnotated();
+
+    // -- HELPER
+
+    private boolean calculateIsExplicitlyAnnotated() {
         val javaMethod = getFacetedMethod().getMethod();
-        return _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent()
-                || super.isExplicitlyAnnotated();
+        return super.isExplicitlyAnnotated() // legacy programming style
+                || _Annotations.synthesize(javaMethod, Domain.Include.class).isPresent();
     }
 
     private ExecutionPublisher getPublisherDispatchService() {