This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 412606959ec63729a5d6451a519d86a3ad2708c7
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 15 14:08:35 2018 +0100

    ISIS-1816 Refactoring names + simplify
---
 .../NavigableParentAnnotationFacetFactory.java     | 46 +++++++++++++++-------
 .../method/NavigableParentFacetMethod.java         | 18 +--------
 2 files changed, 34 insertions(+), 30 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
index 7921bda..585228a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
@@ -19,15 +19,12 @@
 
 package org.apache.isis.core.metamodel.facets.object.navparent.annotation;
 
-import java.beans.IntrospectionException;
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Parent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.NullSafe;
-import org.apache.isis.core.commons.reflection.Reflect;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -67,7 +64,7 @@ public class NavigableParentAnnotationFacetFactory extends 
FacetFactoryAbstract
         // resolve the current domain-object's navigable parent. 
         
         final List<Annotations.Evaluator<Parent>> evaluators = 
-                       Annotations.findFirstInHierarchyHaving(cls, 
Parent.class);
+                       Annotations.firstEvaluatorsInHierarchyHaving(cls, 
Parent.class);
         
         if (NullSafe.isEmpty(evaluators)) {
             return; // no parent resolvable
@@ -85,13 +82,11 @@ public class NavigableParentAnnotationFacetFactory extends 
FacetFactoryAbstract
                // we have a @Parent annotated method
                method = ((Annotations.MethodEvaluator<Parent>) 
parentEvaluator).getMethod();
         } else if(parentEvaluator instanceof Annotations.FieldEvaluator) {
-               // we have a @Parent annotated field (occurs if one uses 
lombok's @Getter on a field)
-               final Field field = ((Annotations.FieldEvaluator<Parent>) 
parentEvaluator).getField();
-               try {
-                               method = Reflect.getGetter(cls, 
field.getName());
-                       } catch (IntrospectionException e) {
-                               return; // no parent resolvable
-                       }
+               // we have a @Parent annotated field (useful if one uses 
lombok's @Getter on a field)
+               method = ((Annotations.FieldEvaluator<Parent>) 
parentEvaluator).getGetter(cls).orElse(null);
+               if(method==null)
+                       return; // code should not be reached, since case 
should be handled by meta-data validation 
+               
         } else {
                return; // no parent resolvable
         }
@@ -117,10 +112,10 @@ public class NavigableParentAnnotationFacetFactory 
extends FacetFactoryAbstract
                 final Class<?> cls = objectSpec.getCorrespondingClass();
                 
                 final List<Annotations.Evaluator<Parent>> evaluators = 
-                               Annotations.findFirstInHierarchyHaving(cls, 
Parent.class);
+                               
Annotations.firstEvaluatorsInHierarchyHaving(cls, Parent.class);
                 
                 if (NullSafe.isEmpty(evaluators)) {
-                       return true; // no conflict
+                       return true; // no conflict, continue validation 
processing
                 } else if (evaluators.size()>1) {
                        
                        validationFailures.add(
@@ -128,9 +123,32 @@ public class NavigableParentAnnotationFacetFactory extends 
FacetFactoryAbstract
                             + "contains multiple annotations '@%s', while at 
most one is allowed.",
                             objectSpec.getIdentifier().getClassName(),
                             Parent.class.getName());
+                       
+                       return true; // continue validation processing
+                } 
+                
+                final Annotations.Evaluator<Parent> parentEvaluator = 
evaluators.get(0);
+                
+                if(parentEvaluator instanceof Annotations.FieldEvaluator) {
+                       // we have a @Parent annotated field (useful if one 
uses lombok's @Getter on a field)
+                       
+                       final Annotations.FieldEvaluator<Parent> fieldEvaluator 
= 
+                                       (Annotations.FieldEvaluator<Parent>) 
parentEvaluator;
+                       
+                       if(!fieldEvaluator.getGetter(cls).isPresent()) {
+                               
+                               validationFailures.add(
+                                   "%s: unable to determine a strategy for 
retrieval of (navigable) parent for class, "
+                                   + "field '%s' annotated with '@%s' does not 
provide a getter.",
+                                   objectSpec.getIdentifier().getClassName(),
+                                   fieldEvaluator.getField().getName(),
+                                   Parent.class.getName());
+                       }
+                       
                 }
                 
-                return true; // no conflict
+                
+                return true; //continue validation processing
                 
             }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
index 167a048..f74b8df 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
@@ -20,9 +20,9 @@
 package org.apache.isis.core.metamodel.facets.object.navparent.method;
 
 import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
 
+import org.apache.isis.core.commons.reflection.Reflect;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacetAbstract;
 
@@ -38,7 +38,7 @@ public class NavigableParentFacetMethod extends 
NavigableParentFacetAbstract {
        
        public NavigableParentFacetMethod(final Method method, final 
FacetHolder holder) throws IllegalAccessException {
                super(holder);
-               this.methodHandle = handleOf(method);
+               this.methodHandle = Reflect.handleOf(method);
        }
 
        @Override
@@ -50,19 +50,5 @@ public class NavigableParentFacetMethod extends 
NavigableParentFacetAbstract {
                }
        }
        
-       // -- HELPER
-       
-       private static MethodHandle handleOf(Method m) throws 
IllegalAccessException {
-               
-               if(!m.isAccessible()) {
-                       m.setAccessible(true);
-                       MethodHandle mh = 
MethodHandles.publicLookup().unreflect(m);
-                       m.setAccessible(false);
-                       return mh;      
-               }
-               
-               return MethodHandles.publicLookup().unreflect(m);
-
-       }
 
 }

-- 
To stop receiving notification emails like this one, please contact
danhayw...@apache.org.

Reply via email to