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,