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