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 2022/01/21 08:32:17 UTC
[isis] branch master updated: ISIS-2944: just fixing tests
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 de0de8c ISIS-2944: just fixing tests
de0de8c is described below
commit de0de8cbea064b855fe31fc43122e736db403bc1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 21 09:31:29 2022 +0100
ISIS-2944: just fixing tests
---
.../isis/applib/annotation/Introspection.java | 22 ++++++--
.../isis/core/metamodel/methods/MethodFinder.java | 26 +++++----
.../model/good/ProperMemberSupportDiscovery.java | 63 ++++++++++------------
3 files changed, 62 insertions(+), 49 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Introspection.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Introspection.java
index 5699d2a..9dd8879 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Introspection.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Introspection.java
@@ -116,7 +116,8 @@ public enum Introspection {
*/
ENCAPSULATION_ENABLED(
EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED,
- MemberAnnotationPolicy.MEMBER_ANNOTATIONS_REQUIRED),
+ MemberAnnotationPolicy.MEMBER_ANNOTATIONS_REQUIRED,
+ SupportMethodAnnotationPolicy.SUPPORT_METHOD_ANNOTATIONS_REQUIRED),
/**
* Introspect public members only, while
@@ -124,7 +125,8 @@ public enum Introspection {
*/
ANNOTATION_REQUIRED(
EncapsulationPolicy.ONLY_PUBLIC_MEMBERS_SUPPORTED,
- MemberAnnotationPolicy.MEMBER_ANNOTATIONS_REQUIRED),
+ MemberAnnotationPolicy.MEMBER_ANNOTATIONS_REQUIRED,
+ SupportMethodAnnotationPolicy.SUPPORT_METHOD_ANNOTATIONS_OPTIONAL),
/**
* Introspect public members only, while
@@ -132,11 +134,13 @@ public enum Introspection {
*/
ANNOTATION_OPTIONAL(
EncapsulationPolicy.ONLY_PUBLIC_MEMBERS_SUPPORTED,
- MemberAnnotationPolicy.MEMBER_ANNOTATIONS_OPTIONAL),
+ MemberAnnotationPolicy.MEMBER_ANNOTATIONS_OPTIONAL,
+ SupportMethodAnnotationPolicy.SUPPORT_METHOD_ANNOTATIONS_OPTIONAL),
;
private final EncapsulationPolicy encapsulationPolicy;
private final MemberAnnotationPolicy memberAnnotationPolicy;
+ private final SupportMethodAnnotationPolicy supportMethodAnnotationPolicy;
}
@@ -165,4 +169,16 @@ public enum Introspection {
}
}
+ /**
+ * Effectively applies on a per class basis, when introspecting
+ * class (object- and member-) support methods for the meta-model.
+ */
+ public static enum SupportMethodAnnotationPolicy {
+ SUPPORT_METHOD_ANNOTATIONS_REQUIRED,
+ SUPPORT_METHOD_ANNOTATIONS_OPTIONAL;
+ public boolean isSupportMethodAnnotationsRequired() {
+ return this == SUPPORT_METHOD_ANNOTATIONS_REQUIRED;
+ }
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
index c75f833..8b3b13f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
@@ -222,33 +222,37 @@ public class MethodFinder {
final Class<? extends Annotation> annotationType,
final ConflictingAnnotations conflictingAnnotations) {
- return of(
+ val finder = of(
correspondingClass,
methodNameCandidates,
// support methods are always allowed private
EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED,
havingAnnotationIfEnforcedByPolicyOrAccessibility(
- memberIntrospectionPolicy,
+ memberIntrospectionPolicy.getSupportMethodAnnotationPolicy().isSupportMethodAnnotationsRequired(),
annotationType,
conflictingAnnotations.getProhibits()));
+ return finder;
}
private static Predicate<Method> havingAnnotationIfEnforcedByPolicyOrAccessibility(
- final IntrospectionPolicy memberIntrospectionPolicy,
+ final boolean annotationRequired,
final Class<? extends Annotation> annotationType,
final Can<Class<? extends Annotation>> conflictingAnnotations) {
- //MemberAnnotationPolicy
- // when REQUIRED -> annot. on support also required
- // when OPTIONAL -> annot. on support only required when support method is private
-
- return memberIntrospectionPolicy.getMemberAnnotationPolicy().isMemberAnnotationsRequired()
+ return annotationRequired
? method->havingAnnotation(method, annotationType, conflictingAnnotations)
- : method-> !_Reflect.isAccessible(method)
- ? havingAnnotation(method, annotationType, conflictingAnnotations)
- : true;
+ : method->havingAnnotationOrPublic(method, annotationType, conflictingAnnotations);
+ }
+
+ private static boolean havingAnnotationOrPublic(
+ final Method method,
+ final Class<? extends Annotation> annotationType,
+ final Can<Class<? extends Annotation>> conflictingAnnotations) {
+ return _Reflect.isAccessible(method)
+ ? true
+ : havingAnnotation(method, annotationType, conflictingAnnotations);
}
//FIXME[ISIS-2774] if annotation appears on an abstract method that was inherited with given method,
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
index ad7442e..fadd0d5 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
@@ -29,35 +29,31 @@ import org.apache.isis.applib.annotation.Nature;
public class ProperMemberSupportDiscovery {
- static abstract class PublicBase {
-
- //public abstract void placeOrder(String x, String y);
-
- //FIXME remove all annotations ...
-
- @MemberSupport public String namedPlaceOrder() { return "my name"; }
- @MemberSupport public String describedPlaceOrder() { return "my description"; }
- @MemberSupport public boolean hidePlaceOrder() { return false; }
- @MemberSupport public boolean hide0PlaceOrder(final String x) { return true; }
- @MemberSupport public boolean hide1PlaceOrder(final String y) { return false; }
- @MemberSupport public String disablePlaceOrder() { return "my disable reason"; }
- @MemberSupport public String disable0PlaceOrder(final String x) { return "my disable reason-0";}
- @MemberSupport public String disable1PlaceOrder(final String z) { return "my disable reason-1";}
- @MemberSupport public String default0PlaceOrder() { return "my default-0";}
- @MemberSupport public String default1PlaceOrder() { return "my default-1";}
-
- @MemberSupport public java.util.Collection<String> choices0PlaceOrder(final String x) {
+ public static abstract class PublicBase {
+
+ public String namedPlaceOrder() { return "my name"; }
+ public String describedPlaceOrder() { return "my description"; }
+ public boolean hidePlaceOrder() { return false; }
+ public boolean hide0PlaceOrder(final String x) { return true; }
+ public boolean hide1PlaceOrder(final String y) { return false; }
+ public String disablePlaceOrder() { return "my disable reason"; }
+ public String disable0PlaceOrder(final String x) { return "my disable reason-0";}
+ public String disable1PlaceOrder(final String z) { return "my disable reason-1";}
+ public String default0PlaceOrder() { return "my default-0";}
+ public String default1PlaceOrder() { return "my default-1";}
+
+ public java.util.Collection<String> choices0PlaceOrder(final String x) {
return List.of("my choice");
}
- @MemberSupport public java.util.Collection<String> autoComplete1PlaceOrder(
+ public java.util.Collection<String> autoComplete1PlaceOrder(
final String y,
@MinLength(3) final String search) {
return List.of("my search arg=" + search);
}
- @MemberSupport public String validate0PlaceOrder(final String x) { return "my validation-0";}
- @MemberSupport public String validate1PlaceOrder(final String y) { return "my validation-1";}
- @MemberSupport public String validatePlaceOrder(final String x, final String y) { return "my validation";}
+ public String validate0PlaceOrder(final String x) { return "my validation-0";}
+ public String validate1PlaceOrder(final String y) { return "my validation-1";}
+ public String validatePlaceOrder(final String x, final String y) { return "my validation";}
}
@@ -89,19 +85,16 @@ public class ProperMemberSupportDiscovery {
}
-//FIXME fails validation
-// @DomainObject(
-// nature = Nature.VIEW_MODEL,
-// introspection = Introspection.ANNOTATION_OPTIONAL)
-// public static class WhenAnnotationOptional
-// //extends PublicBase
-// {
-//
-// // no annotation required, should be picked up as action
-// public void placeOrder(final String x, final String y) {
-// }
-//
-// }
+ @DomainObject(
+ nature = Nature.VIEW_MODEL,
+ introspection = Introspection.ANNOTATION_OPTIONAL)
+ public static class WhenAnnotationOptional {
+
+ // no annotation required, should be picked up as action
+ public void placeOrder(final String x, final String y) {
+ }
+
+ }
@DomainObject(
nature = Nature.VIEW_MODEL,