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 2018/01/15 13:08:39 UTC

[isis] branch ISIS-1740-where-am-i updated: ISIS-1816 Refactoring names + simplify

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

ahuber pushed a commit to branch ISIS-1740-where-am-i
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1740-where-am-i by this push:
     new 2098daa  ISIS-1816 Refactoring names + simplify
2098daa is described below

commit 2098daa10082374108f957833757ee04f5e07de1
Author: Andi Huber <ah...@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
['"commits@isis.apache.org" <co...@isis.apache.org>'].